マシンで 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
た。
では、ディスカバリ エンドポイントはリモート マシンから機能しているように見えますが、サービス エンドポイントは機能していないようですか?
ここでどこが間違っていたのか分かりますか?