サービスがあり、「netstat -anb」を使用して、サービスが実行されているときに正しいポート (8040) でリッスンしていることを確認しました。サービス コントラクトには、次のコントラクトが含まれています。
[OperationContract]
bool RegisterPlayer();
サービス クラス自体がコントラクトを明示的に実装します。
bool IMechService.RegisterPlayer()
{
if (P1 != null)
{
P1 = OperationContext.Current.GetCallbackChannel<IMechServiceCallback>();
return true;
}
else if (P2 != null)
{
P2 = OperationContext.Current.GetCallbackChannel<IMechServiceCallback>();
return true;
}
return false;
}
また、svcutil によって生成されたプロキシは、次のメソッドを作成します。
public bool RegisterPlayer()
{
return base.Channel.RegisterPlayer();
}
このコードは、プロキシの生成とメソッドの呼び出しを試みます。DuplexChannelFactory と svcutil で生成されたプロキシ クラスの両方を使用してみましたが、どちらも同じ結果になります。
client = new MechServiceClient(new InstanceContext(this));
//client = DuplexChannelFactory<IMechService>.CreateChannel(this, new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:8040/MechService"));
client.RegisterPlayer();
コードの実行はプロキシ クラスの RegisterPlayer に到達しますが、タイムアウトに進み、サービスで RegisterPlayer を実行することはありません。残念ながら、タイムアウトしているだけなので、どこで問題を探すべきかを示すのに役立つ例外やエラーが発生していません. これまでのところ、サービスが実行中であり、「netstat -anb」を使用してポート 8040 でリッスンしているように見えることを確認しました。また、mex エンドポイントが意図したとおりに機能し、メタデータを公開していることを確認しました。Windows ファイアウォールをオフにしました。また、手順を正しく実行していることを確認するために、はるかに単純な実装で別のテスト プロジェクトを作成しました。単純なテスト プロジェクトは正常に動作します。これが失敗する原因についてのアイデアがありません。アドバイスをいただければ幸いです。