2015-10-07 15 views
5

汎用アプリケーションからWCFサービスを呼び出すことは可能ですか?汎用アプリケーションのWCFクライアント

サービス参照を追加しましたが、プロキシが正しく生成されました。 しかし、NetTcpBindingをプログラムで作成し、それをプロキシのコンストラクタに渡すと、サービスモデルはPlatformNotSupported例外をスローします。

シミュレータとローカルマシンの両方でアプリを実行すると同じ例外が生成されます。

タイプ 'System.PlatformNotSupportedException' の例外がSystem.Private.ServiceModel.dllに を発生しなく

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); 
"この操作はサポートされていない" ユーザーコードで処理されませんでした

UAPにWCFクライアントが動作している例はありますか?

EDIT

それはサービスが両面サービスであることとは何かを持っています!

当初の契約:

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

CallbackContractを除去した後は、UAPクライアントが接続を作成することができます属性なので、基本的なWCFは動作します。 質問を言い換えるとよいでしょう。 普遍的なアプリケーションで二重 WCFクライアントを作成することはできますか?

編集ホストの servicemodel

<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

私は自分のアプリケーションでそれをやったことがあるはずです(ただし、プロキシコンストラクタに何も渡さずに、適用されない可能性があります)。 – Tobbe

+0

はWindows 10 UWPアプリでこれは? –

答えて

0

はい、それは可能です。これは私がしばらく前にやったサンプルアプリケーションに接続する方法です:

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

私はあなたがあなたのサービスへの参照を追加するときに生成される設定ファイルからのバインディングを使用していました。

これはアプリの外観です。サービス自体は、方法によって、AzureWebRoleとして実行されているO)

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

:エッジのものを....切断します。

+0

可能であれば、完全なスタックトレースを投稿してください。問題についてのより良いヒントを与える内部例外があるかもしれません。 – jsanalytics

+0

これは完全なスタックトレースですか? 'PlatformNotSupportedException'はどこに行きましたか? – jsanalytics

+0

いくつかのことがあります:1)私はあなたが示したものではない、 'PlatformNotSupportedException'に至るきれいな例外チェーンがあると思います。 2)あなたは手動でプロキシを作成していますが、これは必要ではありません。他に何もない場合は、本当に必要なものよりも難しくなります。あなたのプロジェクトと 'Add Service Reference'に行き、あなたのコードに' using'ステートメントを追加するだけです。更新された投稿を見てください。 3)WCFで作業する場合、サービス側のトレースを有効にする必要があります。また、サービストレース表示ツールを使用します。それは、何が起こっているのかを悲惨に示しています。 – jsanalytics

関連する問題