3

マシンで WCF サービスを実行しています。このサービスには、system.servicemodel の下の app.config ファイルに次の構成があります。

<client />
<services>
  <service name="AnchorWcfService.AnchorService" behaviorConfiguration="serviceBehavior">
    <endpoint address="AnchorService" contract="AnchorWcfService.IAnchorService" binding="wsHttpBinding" bindingConfiguration="TransportSecurity" />
    <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding" /> 
  </service>
</services>
<bindings>
  <wsHttpBinding>
    <binding name="TransportSecurity" maxReceivedMessageSize="5000000">
      <readerQuotas maxStringContentLength="5000000" maxDepth="128" maxArrayLength="5000000" />
      <security mode="None">
      </security>
    </binding>
  </wsHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="serviceBehavior">
      <serviceDebug includeExceptionDetailInFaults="true" />
      <serviceMetadata httpGetEnabled="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

私のコードから、次のようにホストを開始します。

serviceHost = new ServiceHost(typeof (AnchorService), new Uri("http://192.168.0.16:8080/"));
serviceHost.Open();

ローカル マシンの IP アドレスはもちろん 192.168.0.16 です。

さらに、コードから次のエンドポイントを追加して、WS-Discovery を有効にしました。

var discoveryBehavior = new ServiceDiscoveryBehavior();
discoveryBehavior.AnnouncementEndpoints.Add(new UdpAnnouncementEndpoint());
serviceHost.Description.Behaviors.Add(discoveryBehavior);
serviceHost.AddServiceEndpoint(new UdpDiscoveryEndpoint());

これで、ローカル マシンの検出と接続から問題なく動作するようになりました。また、wcftestclient を使用して URLhttp://192.168.0.16:8080またはを入力すると、期待どおりにサービスに接続できhttp://localhost:8080ます。これまでのところとても良いです。

次に、クライアントを別のマシンに移動して起動します。

検出は正常に機能し、サーバー マシン上のエンドポイントの URL を返しますが、接続しようとすると、エンドポイントが見つからないと表示されます。

また、wcftestclient 内。接続できません。 と の両方http://192.168.0.16:8080を試しましhttp://192.168.0.16:8080/AnchorServiceた。

では、ディスカバリ エンドポイントはリモート マシンから機能しているように見えますが、サービス エンドポイントは機能していないようですか?

ここでどこが間違っていたのか分かりますか?

4

0 に答える 0