Come posso utilizzare il servizio wcf con contratto duplex nell'app universale di Windows?Come utilizzare il servizio duplex wcf in Windows Universal App
mi sto PlatformNotSupportedExcetpion: Operation is not supported on this platform.
eccezione di runtime quando si cerca di consumare servizio WCF duplex in Windows App universale, il targeting di Windows 10 (10.0; Costruire 10240)
Secondo msdn è supportato API.
Se non è possibile, come devo procedere nel mio scenario? Ho due applicazioni (console e windows universale xaml app) in esecuzione sulla stessa macchina e ho bisogno di comunicazione bidirezionale.
ho clasic .net 4.6 console app, che creano l'host di servizio: contratto
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();
servizio:
[ServiceContract(CallbackContract = typeof(IMyServiceCallback))]
public interface IMyService
{
[OperationContract(IsOneWay = true)]
void Initialize();
}
public interface IMyServiceCallback
{
[OperationContract(IsOneWay = true)]
void OnFrame(int i);
}
Ho provato entrambi, ChannelFactory e generato WCF client Aggiungi riferimento al servizio dialogo e sia NetHttpBinding
e NetTcpBinding
nell'app UWP.
Quando provo a creare un'istanza del client wcf, lancia PlatformNotSupportedExcetpion.
Fonte: 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()
Ho un'app client UWP che funzionava perfettamente collegandosi a un servizio WCF duplex 'net.tcp'. Ho ricreato il progetto da zero dopo la migrazione a Windows10 e ora ottengo lo stesso 'PlatformNotSupportedException'. – jsanalytics
Ho 23 progetti all'interno di questa particolare soluzione. Tutti usano la piattaforma 'AnyCPU', eccetto il progetto UWP appena creato, che accetta/consente solo piattaforme' x86' o 'x64', ma non' AnyCPU'. Quindi, credo che sia da dove viene il problema. Ho provato a fare confusione con i file di progetto aggiungendo manualmente "AnyCPU" .... ma non è andata bene, ovviamente. E ancora, questo funzionava senza problemi con Windows 8.1. Potrebbe esserci qualche problema con il modello di progetto UWP o qualcosa del genere. – jsanalytics
Qualcuno in un altro thread lo ha notato. Dopo aver rimosso l'attributo CallbackContract, il client UWP potrebbe creare una connessione, quindi funziona WCF di base. Quindi si è bloccato con la creazione di un client WCF duplex in un UWP –