1. ホーム
  2. wcf

[解決済み] EndpointDispatcherの例外でContractFilterの不一致が発生する。

2022-08-11 15:48:45

質問

次のようなシナリオをテストしようとしています。

  1. 一般的な WSDL
  2. WSDLに基づいたオブジェクトを実装し、IISでホストされるWCFエンドポイント。
  3. リクエストを作成するためにWSDLに基づいたプロキシを使用するクライアントアプリ。

クライアントからサービスエンドポイントにWebサービスコールを行うと、次のような例外が発生します。

{"The message with Action ' http://IMyService/CreateContainer ' を持つメッセージは、EndpointDispatcher の ContractFilter のミスマッチにより、受信側で処理することができません。 これは、コントラクトの不一致(送信者と受信者間のActionの不一致)、または送信者と受信者間のバインディング/セキュリティの不一致が原因である可能性があります。 送信者と受信者が同じ契約と同じバインディング(セキュリティ要件、たとえばメッセージ、トランスポート、なし)を持っていることを確認してください。}

MS Service Trace Viewer を使い始めたのですが、どこを見ればいいのかわかりません。クライアントとエンドポイントのクラスを見ている間、それらは同一に見えます。

この問題のデバッグをどのように始めればよいのでしょうか。

この例外の原因として考えられることは何ですか?

どのように解決するのですか?

EndpointDispatcherで"ContractFilterの不一致が発生した場合、受信者がメッセージを受信したエンドポイントに設定されているコントラクトのいずれにも一致しないため、受信者がメッセージを処理できなかったことを意味します。

これは、次のような理由が考えられます。

  • クライアントと送信者の間で異なる契約をしている。
  • クライアントと送信者間で異なるバインディングを使用している。
  • メッセージのセキュリティ設定が、クライアントと送信者の間で一貫していません。

をご覧ください。 EndpointDispatcher クラスをご覧ください。

では

クライアントとサーバーの契約が一致することを確認します。

  • WSDL からクライアントを生成した場合、その WSDL は最新のものですか?
  • コントラクトに最近の変更を加えた場合、クライアントとサーバーの両方の正しいバージョンをデプロイしましたか?
  • クライアントのコントラクトクラスを手作りで作成した場合、名前空間、要素名、アクション名がサーバーが期待するものと一致していることを確認します。

クライアントとサーバーの間でバインディングが同じであることを確認します。

  • エンドポイントを管理するために .config ファイルを使用している場合、バインディング要素が一致することを確認します。

クライアントとサーバーでセキュリティ設定が同じであることを確認します。

  • エンドポイントを管理するために .config ファイルを使用している場合、セキュリティ要素が一致していることを確認します。