2015-10-15 21 views
6

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() 
+0

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

+0

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

+0

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 –

risposta

0

scenario duplex non è supportata anche nel 10580 build (ultima v5.1.0 .NETCore).

Si è verificato un errore di GitHub relativo all'utilizzo errato della riflessione nell'implementazione del duplex WCF. Questo bug è stato risolto nell'ultima build per .net core e puoi includere lo individual package dalla galleria Nuget. Tuttavia, questo pacchetto richiede di includere anche le versioni prerelease di System.Runtime e System.Threading.

enter image description here

Speranza che aiuta,

4

versioni stabili di WCF come parte di .NET core 1.0 è stato appena rilasciato il mese scorso. Duplex e molti altri WCF features possono ora essere supportati in Windows Universal Apps facendo riferimento alla versione 5.2.2 del pacchetto Microsoft.NETCore.UniversalWindowsPlatform nel file project.json di un progetto UWP.

Problemi correlati