verbrauchen Wie kann ich den Dienst "wcf" mit Duplex-Vertrag in Windows Universal App verbrauchen?Wie kann ich Duplex-WCF-Dienst in Windows Universal App
Ich erhalte PlatformNotSupportedExcetpion: Operation is not supported on this platform.
Ausnahme Laufzeit, wenn die Duplex Wcf-Dienst in Windows Universal-App zu konsumieren versuchen, Targeting von Windows 10 (10.0; Build-10240)
Nach msdn es API unterstützt wird.
Wenn es nicht möglich ist, wie soll ich in meinem Szenario fortfahren? Ich habe zwei Anwendungen (Konsole und Windows Universal XAML App) läuft auf der gleichen Maschine und ich brauche Zwei-Wege-Kommunikation.
Ich habe clasic .net 4.6 Konsolenanwendung, die den Dienst-Host erstellen:
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();
Servicevertrag:
[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
public interface IMyService
{
[OperationContract(IsOneWay = true)]
void Initialize();
}
public interface IMyServiceCallback
{
[OperationContract(IsOneWay = true)]
void OnFrame(int i);
}
ich beide versucht haben, Channel und WCF-Client von Dienstverweis hinzufügen erzeugt Dialog und sowohl NetHttpBinding
als auch NetTcpBinding
in der in UWP App.
Wenn ich versuche, eine Instanz des WCF-Clients zu erstellen, wird PlatformNotSupportedExcetpion ausgelöst.
Quelle: System.Private.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()
Ich habe eine UWP-Client-App, die perfekt funktionierte, um eine Verbindung zu einem Duplex-'net.tcp' WCF-Dienst herzustellen. Ich habe das Projekt von Grund auf neu erstellt, nachdem ich auf Windows10 migriert habe, und jetzt bekomme ich die gleiche 'PlatformNotSupportedException'. – jsanalytics
Ich habe 23 Projekte innerhalb dieser speziellen Lösung. Sie verwenden alle 'AnyCPU'-Plattformen, mit Ausnahme des neu erstellten UWP-Projekts, das nur' x86'- oder 'x64'-Plattformen akzeptiert/erlaubt, aber keine' AnyCPU'. Also, ich schätze, da kommt das Problem her. Ich habe versucht, Projektdateien mit 'AnyCPU' manuell zu mischen ... aber das lief natürlich nicht gut. Und auch unter Windows 8.1 funktionierte das problemlos. Möglicherweise liegt ein Problem mit der UWP-Projektvorlage oder etwas in der Art vor. – jsanalytics
Jemand in einem anderen Thread hat das notiert. Nach dem Entfernen des CallbackContract-Attributs könnte der UWP-Client eine Verbindung erstellen, sodass der grundlegende WCF funktioniert. Dann blieb er stecken mit der Erstellung eines Duplex-WCF-Client in einem UWP –