14

WCFクライアントエンドポイントにカスタム動作拡張機能を追加する必要があります。構成を介してこれを実行しようとしましたが、WFC構成が型名を正しく解析できないというよく言われるバグに悩まされてきました。では、代わりにプログラムでこれを行うことはできますか?

構成セクションは読み取り専用であるため、実行時に変更できません。クライアントプロキシ(つまりClientBase)のインスタンスを取得した場合、そのEndpoint.Behaviorsにカスタム動作のインスタンスを追加できます。ただし、インスタンスごとにこれを行う必要があります。

エンドポイントにグローバルにアクセスして事前に追加できますか(Global.asaxなど)、またはこれらのエンドポイントはインスタンス化されて一時的に破棄されますか?

4

1 に答える 1

14

次のようなコードでクライアントに動作を追加できるはずです。

IMyEndpointBehavior behavior = client.Endpoint.Behaviors.Find<IMyEndpointBehavior>();

if(behavior == null)
{
   client.Endpoint.Behaviors.Add(new MyEndpointBehaviorImplementation());
}

最初の行は、その動作がすでに適用されているかどうかをチェックして、2回適用されないようにします。まだ適用されていない場合(.Find()呼び出しがnullを返す場合)、プログラムでその動作をクライアントクラスに追加できます。

もちろん、サービスへの最初の呼び出しを発行する前に、これらすべてを行う必要があります。これを実行すると、クライアントを変更できなくなります。

マーク

于 2009-07-28T16:08:50.453 に答える