2015-10-07 3 views
5

Ist es möglich, einen WCF-Dienst von einer universellen Anwendung aus aufzurufen?WCF-Client in einer universellen App

Ich habe eine Service-Referenz hinzugefügt und der Proxy wurde ordnungsgemäß erstellt. Wenn jedoch NetTcpBinding programmgesteuert erstellt und an den Konstruktor des Proxys übergeben wird, löst das Servicemodell die Ausnahme PlatformNotSupported aus.

Bei der Ausführung der App im Simulator und auf dem lokalen Computer wird dieselbe Ausnahme generiert.

Eine Ausnahme des Typs 'System.PlatformNotSupportedException' aufgetreten in System.Private.ServiceModel.dll wurde aber in Benutzercode

"Diese Operation wird nicht unterstützt"

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); 
nicht gehandhabt

Hat jemand ein Beispiel für einen funktionierenden WCF-Client in einem UAP?

EDIT

Es hat etwas mit dem Service ist ein Duplex-Dienst zu tun!

Der ursprüngliche Vertrag:

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

Nach dem CallbackContract Entfernen des UAP-Client-Attribut kann eine Verbindung erstellen, so grundlegenden WCF funktioniert. Also ich denke, es ist besser, die Frage neu zu formulieren. Ist es möglich, einen Duplex WCF-Client in einer universellen Anwendung zu erstellen?

bearbeiten Servicemodel für den 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

Es sollte möglich sein, ich habe es in meiner Anwendung getan (wenn auch ohne etwas an den Proxy-Konstruktor zu übergeben, so könnte nicht anwendbar sein). – Tobbe

+0

ist dies in einer Windows 10 UWP App? –

Antwort

0

Ja, ist es möglich. Dies ist, wie ich in einem Beispiel-App verbinden ich vor einer Weile tat

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... 
      } 

habe ich aus der Konfigurationsdatei, die Bindung, die erzeugt wird, wenn Sie einen Verweis auf Ihren Dienst hinzuzufügen.

So sieht die App aus. Schneide Zeug ....: O)

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

Der Service selbst läuft als WebRole auf Azure, nebenbei bemerkt.

+0

Wenn möglich, posten Sie bitte einen vollständigen Stack-Trace. Möglicherweise gibt es eine innere Ausnahme, die einen besseren Hinweis auf das Problem geben würde. – jsanalytics

+0

Ist das der volle Stack-Trace? Wo ist 'PlatformNotSupportedException' gelandet? – jsanalytics

+0

Ein paar Dinge: 1) Ich würde eine saubere Kette von Ausnahmen erwarten, die zu "PlatformNotSupportedException" führt, was nicht das ist, was Sie gezeigt haben. 2) Du erschaffst deinen Proxy manuell, was NICHT notwendig ist und macht, wenn nichts anderes, die Dinge schwieriger, als sie wirklich sein müssen.Alles, was Sie tun müssten, ist, zu Ihrem Projekt zu gehen und 'Service-Referenz hinzufügen' hinzuzufügen und dann eine' using'-Anweisung in Ihrem Code hinzuzufügen, siehe meinen aktualisierten Beitrag. 3) Wenn Sie mit WCF arbeiten, ist das Aktivieren der Service-Seite-Tracing ein MUSS. Und verwenden Sie auch das Service-Trace-Anzeige-Tool. Es zeigt dir in quälenden Details, was vor sich geht. – jsanalytics

Verwandte Themen