Tag: #wcf

WCF数据服务限制返回字段的能力

我正在使用WCF数据服务来提供要从授权客户端使用的数据。 是否可以限制返回哪些字段(或者可能使用查询拦截器删除数据)? 对于一个非常简单的例子,说我有下表: Id Name DateOfBirth 我通过WCF服务公开这个实体,并且它被Kendo UI网格使用。 如果用户是管理员,我只想要返回DateOfBirth字段。 网格配置将反映这一点。 我可以使用Web API来投影这些结果,但我最好还是让它只与一个服务进行通信。 虽然OData允许我在客户端的查询中使用$ select进行投影,但这可能允许恶意用户更改查询并获取他们不应拥有的数据。 我很想知道我是否可以实际限制服务器上暴露的字段而不必使用其他服务或检查$ select是否有效。 谢谢,

在代码中配置WCF服务绑定

我有一个用代码创建的自托管Web服务: protected void StartService(Type serviceType, Type implementedContract, string serviceDescription) { Uri addressTcp = new Uri(_baseAddressTcp + serviceDescription); ServiceHost selfHost = new ServiceHost(serviceType, addressTcp); Globals.Tracer.GeneralTrace.TraceEvent(TraceEventType.Information, 0, “Starting service ” + addressTcp.ToString()); try { selfHost.AddServiceEndpoint(implementedContract, new NetTcpBinding(SecurityMode.None), “”); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); selfHost.Description.Behaviors.Add(smb); System.ServiceModel.Channels.Binding binding = MetadataExchangeBindings.CreateMexTcpBinding(); selfHost.AddServiceEndpoint(typeof(IMetadataExchange), binding, “mex”); selfHost.Open(); ServiceInfo si = new ServiceInfo(serviceType, […]

获取WCF中回调通道的IP地址

我在双工通道上有一个WCF服务,带有回调契约。 当客户端在服务上调用SubscribeMe()方法时,服务通过将OperationContext.Current.GetCallbackChannel()的结果存储在列表中来跟踪客户端。 该服务将定期ping这些回调通道以跟踪其有效性,并使那些关闭或超时的回叫到期。 我的问题是:当远程主机没有主动向我的服务发出请求时,如何在调用MyCallbackContract.Ping()时,如何获取有关远程主机的信息? 我尝试将回调通道对象转换为IContextChannel ,并访问IContextChannel::RemoteAddress属性,但此属性包含某种与回调通道上的实际远程主机无关的命名空间URI。

NotifyIcon ContextMenu和太多的点击事件

我正在使用NotifyIcon类在任务栏中显示一个图标。 该图标执行2个function – 当用户单击左键时,它应显示一个窗口,当用户单击右键时,它应显示上下文菜单。 除了在用户单击上下文菜单中的选项后显示的窗口之外,此工作正常。 这是我的代码: contextMenuItems = new List(); contextMenuItems.Add(new MenuItem(“Function A”, new EventHandler(a_Clicked))); contextMenuItems.Add(new MenuItem(“-“)); contextMenuItems.Add(new MenuItem(“Function B”, new EventHandler(b_Clicked))); trayIcon = new System.Windows.Forms.NotifyIcon(); trayIcon.MouseClick += new MouseEventHandler(trayIcon_IconClicked); trayIcon.Icon = new Icon(GetType(), “Icon.ico”); trayIcon.ContextMenu = contextMenu; trayIcon.Visible = true; 问题是当用户选择“functionA”或“functionB”时会触发我的trayIcon_IconClicked事件。 为什么会这样? 谢谢,J

无法连接到远程WCF服务 – SecurityNegotiationException

我开始使用WCF ,我正在关注来自MSDN的示例 。 我设法在一台机器上运行Getting Started示例,并在不同的机器上部署客户端和服务并远程访问服务。 我的目标是实现发布/订阅设计模式 。 我设法在一台机器上运行它没有任何大问题。 但是当我在不同的机器上部署客户端和服务时,我的客户端无法连接到该服务。 我得到以下exception: System.ServiceModel.Security.SecurityNegotiationException was unhandled Message=The caller was not authenticated by the service. Source=mscorlib (如果需要,我可以共享堆栈跟踪。) 这是我的配置: 服务 – web.config 客户端 – app.config <binding name="WSDualHttpBinding_ISampleContract" clientBaseAddress="http://:8000/myClient/” closeTimeout=”00:01:00″ openTimeout=”00:01:00″ receiveTimeout=”00:10:00″ sendTimeout=”00:01:00″ bypassProxyOnLocal=”false” transactionFlow=”false” hostNameComparisonMode=”StrongWildcard” maxBufferPoolSize=”524288″ maxReceivedMessageSize=”65536″ messageEncoding=”Text” textEncoding=”utf-8″ useDefaultWebProxy=”true”> <endpoint address="http:///ServiceModelSamples/service.svc” binding=”wsDualHttpBinding” bindingConfiguration=”WSDualHttpBinding_ISampleContract” contract=”ISampleContract” name=”WSDualHttpBinding_ISampleContract”> <servicePrincipalName value="host/” /> 我已经找到了解决方案,但没有任何对我有用。 […]

WCF服务应该返回普通的旧对象,还是您正在使用的实际类?

我正在从另一家公司使用WCF服务,它正在返回一个object类型的object 。 有没有理由不返回实际的类,并返回一个必须强制转换为正确forms的对象? 例如,如果Web服务返回OrderStatus类型的对象,为什么要返回一个普通的旧object ? 如果我错了,请纠正我,但这需要我手动(通过电子邮件或其他)获取OrderStatus类的定义,并将其放入我的解决方案中。 另外,我必须将对象显式地转换为OrderStatus对象。 更不用说公司可以更改服务以返回另一种类型的对象,我的代码将停止工作。 如果服务的返回值是OrderStatus类型的对象,那么该类会自动为我生成吗?

WCF配置服务器以记住数据

我目前在WCF中有一个服务,它处理客户端发出的请求。 但是,它会缓存客户端发送的一些数据。 然后它对数据进行计算。 在任何时候,客户端都应该能够检索一些数据。 它由用户自行决定(当单击一个Button时,会发送一个AJAX查询来获取一些数据)。 我遇到的问题是,只要另一个客户端连接并开始发送请求,原始客户端发送的数据现在就会失真。 我想知道如何解决这个问题。 我试图使用会话,因为我正在寻找一些方法,我可以为每个想要连接它的客户端实例化我的“服务器对象”。 仍然没有运气。 此问题与此相关: WCF关闭连接/释放资源

exception消息是On数据上下文类型,有一个顶级IQueryable属性,其元素类型不是实体类型

我建立了我在IIS 7中托管的WCFDataService,我将使用Reflection Provider作为数据源提供程序。 我的示例工作,如果我将实体类型定义保持在我定义服务的同一个程序集中,但是如果我将实体类型移动到另一个引用的程序集并且出现以下错误则不起作用 “服务器遇到处理请求的错误。exception消息是’在数据上下文类型’EntityContainer’,有一个顶级IQueryable属性’Cats’,其元素类型不是实体类型” 服务 public class WcfDataService1 : DataService { public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule(“Cats”, EntitySetRights.AllRead); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3; } } 实体容器 public class EntityContainer { public IQueryable Cats { get { var s = new List(); var c1 = new Cat {Id = 1, Name = “Fufi”}; var c2 = […]

在另一个进程中处理WCF事件

我有一个不可序列化的对象,我想从一个单独的进程访问。 我环顾四周,似乎唯一可行的选择是使用WCF,但我不知道如何做到这一点,因为我是WCF的新手。 如果我创建一个WCF服务,如何将WinForm挂钩到WCF服务中的各种事件? 例如,用户直接与WCF服务通信,我希望WinForm客户端得到通知。 我怎么能知道用户何时使用WCF服务做了什么并让WinForm客户端接受了这个?

如何在WCF中使用SSL加密

我在本教程中有一个简单的应用程序: WCF 4入门教程 我该如何实现一些加密? 像HTTPS(SSL?)之类的东西。 教程中的示例代码。 static void Main(string[] args) { // Step 1 of the address configuration procedure: Create a URI to serve as the base address. Uri baseAddress = new Uri(“http://localhost:8000/ServiceModelSamples/Service”); // Step 2 of the hosting procedure: Create ServiceHost ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress); try { // Step 3 of the […]