如何在Windows Universal App中使用双工wcf服务

如何在Windows通用应用程序中使用双工合约使用wcf服务?

我正在使用PlatformNotSupportedExcetpion: Operation is not supported on this platform. 尝试在Windows Universal App中使用双面wcf服务时出现运行时exception,目标是Windows 10(10.0; Build 10240)

根据msdn,它支持API。

如果不可能,我应该如何进行我的方案? 我有两个应用程序(控制台和Windows通用xaml应用程序)在同一台机器上运行,我需要双向通信。

我有创建服务主机的clasic .net 4.6控制台应用程序:

 var host = new ServiceHost(typeof(MyService), new Uri("net.tcp://localhost:8008/MyService")); var binding = new NetTcpBinding(); //I've also tried net http binding binding.Security.Mode = SecurityMode.None; host.Description.Behaviors.Add(new ServiceMetadataBehavior()); host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexTcpBinding(), "mex"); host.AddServiceEndpoint(typeof(IMyService), binding, ""); host.Open(); 

服务合约:

 [ServiceContract(CallbackContract = typeof(IMyServiceCallback))] public interface IMyService { [OperationContract(IsOneWay = true)] void Initialize(); } public interface IMyServiceCallback { [OperationContract(IsOneWay = true)] void OnFrame(int i); } 

我已经通过“添加服务引用”对话框以及UWP应用程序中的NetHttpBindingNetTcpBinding尝试了ChannelFactory和生成的wcf客户端。

当我尝试创建wcf客户端的实例时,它会抛出PlatformNotSupportedExcetpion。

来源:System.Private.ServiceModel

堆栈跟踪:

  at System.ServiceModel.ReflectionExtensions.GetInterfaceMap(Type type, Type interfaceType) at System.ServiceModel.Description.TypeLoader.GetIOperationBehaviorAttributesFromType(OperationDescription opDesc, Type targetIface, Type implType) at System.ServiceModel.Description.TypeLoader.c__DisplayClass8.b__10(Type currentType, KeyedByTypeCollection`1 behaviors) at System.ServiceModel.Description.TypeLoader.AddBehaviorsAtOneScope[IBehavior,TBehaviorCollection](Type type, TBehaviorCollection descriptionBehaviors, ServiceInheritanceCallback`2 callback) at System.ServiceModel.Description.TypeLoader.AddBehaviorsFromImplementationType(ServiceEndpoint serviceEndpoint, Type implementationType) at System.ServiceModel.ChannelFactory`1.ReflectOnCallbackInstance(ServiceEndpoint endpoint) at System.ServiceModel.ChannelFactory`1.CreateDescription() at System.ServiceModel.ChannelFactory.InitializeEndpoint(Binding binding, EndpointAddress address) at System.ServiceModel.DuplexChannelFactory`1..ctor(Object callbackObject, Binding binding, EndpointAddress remoteAddress) at System.ServiceModel.ClientBase`1..ctor(InstanceContext callbackInstance, Binding binding, EndpointAddress remoteAddress) at System.ServiceModel.DuplexClientBase`1..ctor(InstanceContext callbackInstance, Binding binding, EndpointAddress remoteAddress) at App1.ServiceReference1.MyServiceClientBase..ctor(InstanceContext callbackInstance) at App1.ServiceReference1.MyServiceClient..ctor(MyServiceClientCallback callbackImpl) at App1.ServiceReference1.MyServiceClient..ctor() at App1.MainPage.

即使在10580版本(最新的.NETCore v5.1.0)中也不支持双工方案。

有一个错误报告了离线GitHub关于WCF双工实现中错误使用reflection的问题。 在.net核心的最新版本中修复了此错误,您可以在Nuget gallery中包含单个包 。 但是,此程序包要求您还包括System.Runtime和System.Threading的预发布版本。

在此处输入图像描述

希望能帮助到你,

作为.NET Core 1.0的一部分,WCF的稳定版本上个月刚刚发布。 现在,通过在UWP项目的project.json文件中引用5.2.2版本的Microsoft.NETCore.UniversalWindowsPlatform包,可以在Windows Universal Apps中支持双工和许多其他WCFfunction 。