5

IIS8 に WCF サービス ホストがあり、net.tcp バインディングを使用したいと考えています。

私はこの構成を持っています:

Web.config:

<service behaviorConfiguration="MyBehavior"
  name="DecryptService.EmailCenterDecryptTCP">
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://XX.XX.XX.XX:808/VirtualFolder/Service.svc" />
      </baseAddresses>
    </host>

    <endpoint address=""
          binding="netTcpBinding"
          bindingConfiguration="portSharingBinding"
          name="MyServiceEndpoint"
          contract="ServiceNamespace.IService">
    </endpoint>

    <endpoint address="mextcp"
          binding="mexHttpBinding"
          bindingConfiguration=""
          name="MyServiceMexTcpBidingEndpoint"
          contract="IMetadataExchange" />
</service>

次の構成で IIS8 と同じマシンでサービスを使用しようとすると、正常に動作します。

<client>
        <endpoint address="net.tcp://YY.YY.YY.YY:808/VirtualFolder/Service.svc"
            binding="netTcpBinding" bindingConfiguration="MyServiceEndpoint"
            contract="ServiceReference1.IService" name="MyServiceEndpoint" />
    </client>

YY.YY.YY.YY はマシンのローカル IP ですが、別のマシンでサービスを利用しようとすると、YY.YY.YY.YY が IIS8 を実行するマシンの外部 IP (ZZ.ZZ.ZZ.ZZ) に変更されます。次のエラーが表示されます。

There was no endpoint listening at net.tcp://ZZ.ZZ.ZZ.ZZ/VirtualFolder/Service.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

何か案は?私の悪い英語に感謝し、申し訳ありません

編集:

IIS を置き換える ServiceHost を実行するコンソール アプリケーションを作成しました。この構成では、インターネット経由で動作します。

var svh = new ServiceHost(typeof (Service));
svh.AddServiceEndpoint(typeof (ServiceNamespace.IService), new NetTcpBinding(SecurityMode.None), "net.tcp://serverLocalIp:808");
svh.Open();

Console.WriteLine("SERVER - Running...");
stopFlag.WaitOne();

Console.WriteLine("SERVER - Shutting down...");
svh.Close();

Console.WriteLine("SERVER - Shut down!");

インターネット経由で同じサービスを実行している IIS の何が問題なのですか? ローカルで動作します。ありがとう

4

3 に答える 3