Как использовать службу 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. Однако этот пакет требует, чтобы вы также включили предварительные версии системы.Среда выполнения и Система.Нарезка резьбы.
надеюсь, это поможет,
стабильные версии WCF в составе .NET Core 1.0 были выпущены только в прошлом месяце. Дуплекс и многие другие функции WCF теперь можно поддерживать в универсальных приложениях Windows, ссылаясь на версию 5.2.2 Microsoft.NETCore.UniversalWindowsPlatform пакета в проекте.JSON-файл проекта UWP.