コンソール プロセスでホストされている wcf サービスがあります。サービス エンドポイントの作成は、net tcp バインディングを使用する program.cs ファイル内のコードによって行われます。
チャネルのクライアント側の作成は、コードを介して行われます。
このセットアップは、ローカル ホストで正常に機能します。しかし、他のマシンでサービスをホストし、他のマシンからサービスに接続しようとすると (クライアント IP アドレスが更新されます)、以下のエラーが発生します。
System.ServiceModel.EndpointNotFoundException: net.tcp://10.10.1.1:8232/Service/ に接続できませんでした。接続の試行は、00:00:00 の期間継続しました。TCP エラー コード 10061: ターゲット マシンがアクティブに拒否したため、接続できませんでした 10.10.1.1:8232。---> System.Net.Sockets.SocketException: ターゲット マシンがアクティブに拒否したため、接続できませんでした 10.10.1.1:8232
注: その他のシナリオ => サービスとクライアントが同じマシンで実行されています。
サービス エンドポイント URL アドレスを追加するサービス ホストでは、127.0.0.1 として指定されました。
これをクライアント側で使用し、同じマシンの IP アドレスを指定すると、サービスに接続できませんでした。
しかし、サービス エンドポイント構成で 127.0.0.1 の代わりにlocalhostを指定すると、サービスに正常に接続できます。
127.0.0.1 では動作しない理由はわかりませんが、同じマシンのローカル ホストでは動作します。これは期待されていますか?
ローカル ホストを変更した後でも、他のマシンに存在するサービスに接続できませんでした。
どんな提案でも大歓迎です。
ポートはファイアウォールによってブロックされていません。
** コードによるサーバー側の設定 **,
var tcpBinding = new NetTcpBinding(SecurityMode.None)
{
MaxBufferPoolSize = int.MaxValue,
MaxBufferSize = int.MaxValue,
MaxReceivedMessageSize = int.MaxValue,
ReaderQuotas =
{
MaxArrayLength = int.MaxValue,
MaxNameTableCharCount = int.MaxValue,
MaxStringContentLength = int.MaxValue,
MaxDepth = int.MaxValue,
MaxBytesPerRead = int.MaxValue
},
ReceiveTimeout = TimeSpan.MaxValue
};
var host = new ServiceHost(typeof(Service));
host.AddServiceEndpoint(typeof(IService), tcpBinding, "net.tcp://localhost:8232/Service/");
host.Open();
Console.ReadLine();
host.Close(); `
** クリネ側の構成 **
string endPointAdress = "net.tcp://10.10.1.1:8232/Service";
var ServiceProxy = ChannelFactory.CreateChannel( tcpBinding, 新しい EndpointAddress(endPointAdress));
*/ tcp バインディングは、クライアントとサービスの両方で同じです。
この問題は、データ コントラクトが原因で発生する可能性がありますか? しかし、そうであれば、ローカルホストでも機能しないはずです。私の理解が間違っている場合は、修正してください。
解決
からのサーバー構成の変更
** net.tcp://127.0.0.1:8232/Service/ ** を ** net.tcp://localhost:8232/Service/ ** に変更すると問題が解決するようです。そして、言及された解決策は、誰かにとって役立つかもしれません。これはなぜですか?皆さんありがとう。