質問

TCP ポートを介して WCF サービスをホストするにはどうすればよいですか?また、これらの TCP ポートを介して WCF サービスをリッスンしてサービスを利用するにはどうすればよいですか?

つまり、net.tcp バインディングとは別に、TCP ポートを使用してホストおよび消費する方法はあるのでしょうか?

役に立ちましたか?

解決

WCFでは、あなたは、のServiceHostクラスのインスタンスを作成することにより、自分で任意のサービスをホストすることができ、正しいエンドポイントとあなたが公開したいサービスの実装でそれを設定し、それにOpenを呼び出します。あなたがあなた自身のアプリケーション内からサービス(およびそのポートリスナー)をホストので、これは、のセルフホスティングのと呼ばれます。

また、あなたは、IISでサービスをホストすることができますが、あなたはIIS 6でWCFをホストすることができますが、それだけでHTTPおよびHTTPSエンドポイントをホストすることができますことに注意してください。あなたは(良いアイデアです)IISでTCPエンドポイントをホストする場合は、IIS 7が必要になります。

続きを読むここを。

他のヒント

あなたのWCFサービスをホストするために(あなたはそれのための許可を得て)任意のポートを使用することができます。それは多少異なりますが、セルフホスティング環境でのWCFサービスをホストするIISを使用しているとき、ちょうどあなたのベースアドレスにポート番号を追加すれば完了です。 (VistaまたはServer 2008を使用している場合(管理者権限で実行していないとき、あなたは、ポートへのアクセスを許可する必要があり、例えば使用のnetsh))

は、例えば使用しますお使いのベースアドレスに、残りはあなたのために行われている。

:「1337 /」HTTPサービス(またはnet.tcp)用のポート1337だけ追加します。

この助けとなる可能性があります。

<services>
  <service behaviorConfiguration="configname"
    name="servicename">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="MyServiceBinding"
      name="NetTcpBindingEndpoint" bindingName="MyServiceBinding"
      contract="Interface">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>

    <endpoint address="mex" binding="customBinding" bindingConfiguration="myMexTcpBinding"
      name="MexTcpBindingEndpoint" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:prot/TestService" />
      </baseAddresses>
    </host>
  </service>
</services>

すべての HTTP バインディングは、トランスポート層の TCP と連携して動作します。したがって、HTTP バインディングと IIS.6 を使用して、特定の TCP ポートで実行される WCF サービスをホストできます。

これを達成する方法については、次の手順で説明します。

  • 構成ファイル (またはコード) から、目的のポートで実行されるようにサービスを構成します。

    <service name="WCFService" behaviorConfiguration="DefaultBehaviour">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/WCFService" />
      </baseAddresses>
    </host>
    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="WCFService_mexEndpoint" contract="IMetadataExchange" />
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="DefaultBinding" name="WCFService_Endpoint" contract="WCFService.IService1" />
    

  • IIS で Web サイト (または仮想ディレクトリ) を作成し、baseAddress サービス構成で選択したポート (上記の例では 8000) で実行されるようにバインドを構成します。

上記の手順の結果、トランスポート プロトコルとして HTTP を使用し、トランスポート層の TCP ポート 8000 で実行される WCF サービスが作成されます。

編集 :ここで少し混乱を招いていると思います。実現しようとしているのがバイナリで送信されるパッケージである場合、手元にある唯一の解決策は net.tcp バインディングであり、これは IIS.6 と互換性がありません。接続の TCP ポートを選択できるようにしたいだけの場合は、上記の例で示したように、どの HTTP バインディングでもこれを行うことができ、IIS.6 で使用できます。

私はあなたは、Visual Studioに付属している「WCFサービスホスト」アプリを使用することができたと、少し遅れて知っている..しかします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top