Как использовать службу duplex wcf в универсальном приложении Windows

как я могу использовать службу wcf с дуплексным контрактом в универсальном приложении Windows?

Я PlatformNotSupportedExcetpion: Operation is not supported on this platform. исключение времени выполнения при попытке использовать дуплексную службу wcf в универсальном приложении Windows, ориентируясь на Windows 10 (10.0; Build 10240)

по данным в MSDN поддерживается API.

если это невозможно, как я должен действовать в моем сценарии? У меня есть два приложения (console и Windows universal xaml app), работающие на одном компьютере и мне нужно двустороннее общение.

у меня есть консольное приложение 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);
}

Я пробовал оба, ChannelFactory и сгенерированный клиент wcf, добавив диалоговое окно ссылки на службу и оба NetHttpBinding и NetTcpBinding в приложении in UWP.

когда я пытаюсь создать экземпляр клиента wcf, он бросает PlatformNotSupportedExcetpion.

источник: Система.Частный.ServiceModel

StackTrace:

 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.<AddBehaviorsFromImplementationType>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.<button_Click>d__1.MoveNext()

2 ответов


дуплексный сценарий не поддерживается даже в сборке 10580 (последняя версия .NETCore v5.1.0).

была ошибка, сообщенная ion GitHub о неправильном использовании отражения в реализации дуплекса WCF. Эта ошибка была исправлена в последней сборке для .net core, и вы можете включить индивидуальный пакет из галереи Nuget. Однако этот пакет требует, чтобы вы также включили предварительные версии системы.Среда выполнения и Система.Нарезка резьбы.

enter image description here

надеюсь, это поможет,


стабильные версии WCF в составе .NET Core 1.0 были выпущены только в прошлом месяце. Дуплекс и многие другие функции WCF теперь можно поддерживать в универсальных приложениях Windows, ссылаясь на версию 5.2.2 Microsoft.NETCore.UniversalWindowsPlatform пакета в проекте.JSON-файл проекта UWP.