2

ファイアウォールのない Windows Server 2008 RC2 IIS 7 で WCF サービスを実行しています。netTcpBinding バインディングで呼び出そうとすると、次の例外が発生します。

System.TimeoutException: 00:00:30 の割り当てられたタイムアウト内に開く操作が完了しませんでした。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。---> System.TimeoutException: ソケット転送が 00:00:30 後にタイムアウトしました。バインディングに設定されたタイムアウトを超えました。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。---> System.Net.Sockets.SocketException: 接続先が一定時間後に適切に応答しなかったために接続の試行が失敗したか、接続されたホストが応答しなかったために確立された接続が失敗しました
System.Net.Sockets.Socket.Receive (Byte[] バッファー、Int32 オフセット、Int32 サイズ、SocketFlags socketFlags) で System.ServiceModel.Channels.SocketConnection.ReadCore (Byte[] バッファー、Int32 オフセット、Int32 サイズ、TimeSpan タイムアウト、ブーリアンクロージング)...

私が呼び出すメソッドは数値を返すだけなので、問題はタイムアウトではありません。wsHttpBinding を使用すると、問題なく動作します。また、呼び出すメソッドにログを追加したので、実行されていないこともわかりました。

ここから IIS を構成するすべての手順を実行しました。質問は次のとおりです。

  1. 問題が何であるか知っている人はいますか?
  2. この問題をトラブルシューティング/デバッグするにはどうすればよいですか?
4

1 に答える 1

1

私はあなたと同じように、この誤解を招くエラー メッセージに不満を感じています。私が間違っていなければ、最初の 1 秒以内にこの TimeoutException が発生します。セキュリティまたはシリアライゼーションの問題に関連する問題であることを保証できます。この問題を Microsoft の WCF 製品グループに伝えましたが、彼らは驚いたようでしたが、何も連絡がありませんでした。

最初の提案は、NetTcpBinding セキュリティ設定を確認することです。クライアントとサービスの両方で、最初から最低限必要なセキュリティ設定が同一であることを確認してください (メッセージの暗号化やトランスポート層のセキュリティではないなど)。セキュリティなしで動作させることができる場合は、段階的にセキュリティ設定を増やしてください。

いくつかのシリアル化の問題がサービスをクラッシュさせている可能性がある 2 つ目の提案: 空の null 許容フィールド、操作と混合するオーバーロードされたメソッド、あいまいなコントラクト名、無効なキャスト。デバッグするには、サービスの構成設定でトレースをセットアップします。これは、WCF サービス構成ユーティリティ (SvcConfigEditor.exe) を使用して簡単に実行できます。サービスを実行して例外を取得し、停止して、生成されたトレース ログを WCF サービス トレース ビューアー ツールで開きます。どちらのツールも (Visual Studio ではなく) .NET に付属しており、Program Files/Windows SDKs フォルダーにあります。

于 2011-02-02T08:40:43.173 に答える