3

私は、WCF を使用して 2 つのアプリケーションを相互に通信させる、小さくて基本的な作業例を用意しています。サーバーをリッスンするクライアント アプリの app.config ファイルには、設定を構成する XML が含まれています。コンパイル時にハードコーディングされる設定の 1 つは、basicHttpBinding 設定の下に埋め込まれている sendTimeout 設定です。例えば:

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IScriptRunHost" closeTimeout="00:05:00"
                    openTimeout="00:05:00" receiveTimeout="00:05:00" sendTimeout="00:00:15"

実行時に (c# を使用して) sendTimeout プロパティを設定できるようにしたいと考えています。ただし、WCF は初めてなので、どこから始めればよいかわかりません。

4

1 に答える 1

8

コードで、構成ファイルで行うことは何でもできます。新しいクライアント プロキシを作成し、実行時に必要なバインディング構成をそれに割り当てることで、タイムアウトやさまざまな構成の詳細を動的に設定できます。

ServiceClient _client = new ServiceClient(new BasicHttpBinding { SendTimeout = new TimeSpan(2, 0, 0) },new EndpointAddress("http://localhost:8089/MyService.svc"));

また:

BasicHttpBinding myBinding = new BasicHttpBinding();
                 myBinding.OpenTimeout = new TimeSpan(2, 0, 0);
                 myBinding.CloseTimeout = new TimeSpan(2, 0, 0);
                 myBinding.SendTimeout = new TimeSpan(2, 0, 0);

ServiceClient _client = new ServiceClient();
              _client.Endpoint.Binding = myBinding;

しかし、おそらくコードを一瞥して推測できるように、実行時にタイムアウト値、サービス エンドポイント、またはほとんどすべてのバインディング構成を変更したい場合は、以前のクライアント プロキシを破棄して破棄する必要があります。それを削除して、作成した新しいものを使用すると、クライアントがサービスから一時的に切断されるため、明らかに望ましくない影響が生じるため、そのことを覚えておいてください. また、構成ファイルで 2 つまたは 3 つ (または必要な数) のバインディング構成を定義し、新しいクライアントを作成して、そのバインディングを使用するように構成することもできます。これは、コードで行うのとほとんど同じです。この方法でも、別のバインディング構成を使用できるようにするには、新しいクライアント プロキシをインスタンス化する必要があります。

于 2012-06-05T18:41:50.587 に答える