2015-10-07 19 views
5

È possibile chiamare un servizio WCF da un'applicazione universale?Client WCF in un'app universale

Ho aggiunto un riferimento al servizio e il proxy è stato generato correttamente. Ma quando si crea un NetTcpBinding a livello di codice e lo si passa al costruttore del proxy, il modello di servizio genera l'eccezione PlatformNotSupported.

Entrambe l'esecuzione dell'applicazione nel simulatore e sul computer locale genera la stessa eccezione.

Un'eccezione di tipo 'System.PlatformNotSupportedException' avvenuta in System.Private.ServiceModel.dll ma non era gestito in codice utente

"questa operazione non è supportato"

EndpointAddress address = new EndpointAddress("net.tcp://test:9000/ServicesHost/PublishService"); 
NetTcpBinding binding = new NetTcpBinding(); 
binding.Security.Mode = SecurityMode.None; 

PublishingService.PublishClient proxy = new PublishingService.PublishClient(binding, address); 

Qualcuno ha un esempio di un client WCF funzionante in un UAP?

EDIT

Ha qualcosa a che fare con il servizio essendo un servizio duplex!

Il contratto originale:

[ServiceContract(CallbackContract = typeof(IPublishCallback))] 
public interface IPublish { } 

Dopo aver rimosso il CallbackContract attributo il cliente UAP in grado di creare una connessione, così fondamentale WCF funziona. Quindi immagino sia meglio riformulare la domanda. È possibile creare un client duplex in un'applicazione universale?

modificare ServiceModel per l'host

<system.serviceModel> 
    <bindings> 
     <netTcpBinding>   
      <binding name="netTcpPublishService" openTimeout="00:00:10" receiveTimeout="infinite"> 
       <reliableSession inactivityTimeout="24.20:31:23.6470000" enabled="true" /> 
       <security mode="Transport"> 
        <transport clientCredentialType="Windows" /> 
       </security> 
      </binding> 
     </netTcpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="serviceBehaviour">  
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="serviceBehaviour" name="PublishService.Publish"> 
     <endpoint binding="mexHttpBinding" name="mexPublishService" 
      contract="IMetadataExchange" /> 
     <endpoint address="PublishService" binding="netTcpBinding" bindingConfiguration="netTcpPublishService" 
      name="netTcpPublishService" contract="PublishService.IPublish" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8004/ServicesHost/PublishService" /> 
      <add baseAddress="net.tcp://localhost:9004/ServicesHost/PublishService" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    </system.serviceModel> 
+0

Dovrebbe essere possibile, l'ho fatto nella mia applicazione (anche se senza passare nulla al costruttore proxy, quindi potrebbe non essere applicabile). – Tobbe

+0

si trova in un'app UWP di Windows 10? –

risposta

0

Sì, è possibile. Questo è come mi collego in un'applicazione di esempio che ho fatto qualche tempo fa:

using Tradeng.Srvc.Client.WinAppSimple.SrvcRefTradeng; 

private InstanceContext instanceContext; 
private TradengSrvcClientBase serviceProxy; 

      instanceContext = new InstanceContext(this); 
      serviceProxy = new TradengSrvcClientBase(instanceContext); 

      bool result = await serviceProxy.ConnectAsync(); 

      if (result) 
      { 
       // connected... 
      } 

ho usato l'associazione dal file di configurazione che viene generato quando si aggiunge un riferimento al vostro servizio.

Ecco come appare l'app. Taglio roba bordo ....: O)

https://www.youtube.com/watch?v=YSg6hZn1DpE

Il servizio in sé è in esecuzione come un WebRole su Azure, tra l'altro.

+0

Se possibile, si prega di inviare una traccia dello stack completo. Potrebbe esserci qualche eccezione interiore che darebbe un suggerimento migliore sul problema. – jsanalytics

+0

È la traccia dello stack completo? Dove è finito 'PlatformNotSupportedException'? – jsanalytics

+0

Alcune cose: 1) Mi aspetto una catena di eccezioni che porti a 'PlatformNotSupportedException', che non è quello che hai mostrato. 2) Stai creando il tuo proxy manualmente, il che NON è necessario e, se non altro, rende solo le cose più difficili di quanto debbano essere.Tutto quello che dovresti fare è andare al tuo progetto e "Aggiungi riferimento al servizio" e poi aggiungere un'istruzione 'using' nel tuo codice, vedi il mio post aggiornato. 3) Quando si lavora con WCF, la traccia lato servizio abilitata è obbligatoria. E anche utilizzare lo strumento di visualizzazione traccia del servizio. Ti mostra in dettagli strazianti cosa sta succedendo. – jsanalytics

Problemi correlati