2009-12-01 16 views
10

私はサーバーとクライアント間の通信にWCFを使用しています(どちらもC#で書かれています)。プログラムでWCFタイムアウトをデバッグモードで設定する

リリースモードでは、タイムアウトは〜20秒に設定する必要がありますが、デバッグモードではタイムアウトを発生させずにデバッグ/ステップ実行できるように、デバッグモードでそれらの値を高く設定します。

私はapp.configファイルを変更してタイムアウトを変更できることを知っています。しかし、私は2つの異なるバインディングと4つのタイムアウト値を持っていますので、いくつかの場所で変更する必要があり、忘れやすいです。

これを解決するには、プログラムでタイムアウト値を1時間に変更する小さな#if DEBUGセクションをコード内に作成したいと思います。

私はこれを行うには、次のコードを使用しようとしました:

Configuration configuration = 
     ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
ServiceModelSectionGroup serviceModel = 
     ServiceModelSectionGroup.GetSectionGroup(configuration); 

BindingsSection bindings = serviceModel.Bindings; 

foreach (var configuredBinding in bindings.WSHttpBinding.ConfiguredBindings) 
{ 
configuredBinding.CloseTimeout = new TimeSpan(0, 30, 0); 
configuredBinding.OpenTimeout = new TimeSpan(0, 30, 0); 

が、*タイムアウトプロパティは、私はコンパイルエラーを取得する読み取り専用です。

プログラムでスクラッチからバインディングを作成することは気にしません。 app.configの属性の一部を変更した場合、デバッグの動作がリリースの動作と似ていることを確認するために、同じ変更をコード内で行うことを忘れないでください(タイムアウトを除く)。

これを処理する方法については、誰でも良いヒントがありますか?

答えて

12

次の操作を行うことができます:

  • 結合し、コード内のエンドポイント
  • は、それら二つの要素
を使用してクライアントのプロキシを作成バインディングインスタンス
  • にタイムアウトを設定を作成します

    次のようなもの:

    BasicHttpBinding myBinding = new BasicHttpBinding("ConfigName"); 
    myBinding.CloseTimeout = ....... 
    myBinding.OpenTimeout = ....... 
    myBinding.ReceiveTimeout = ....... 
    myBinding.SendTimeout = ....... 
    
    EndpointAddress myEndpoint = new EndpointAddress("http://server:8181/yourservice"); 
    
    YourServiceClient proxy = new YourServiceClient(myBinding, myEndpoint); 
    

    このように、バインディングタイムアウトを記述するときに基本設定を活用できますが、必要な設定を微調整してクライアントプロキシを作成することもできます。

  • 2

    web.configで2番目のバインディングを作成し、より長いsendTimeoutを設定することができます。 `Client`で

     if (debug) 
         { 
          proxy = new MyClient("WSHttpBinding_MyLocal"); 
         } 
         else 
         { 
          proxy = new MyClient("WSHttpBinding_MyDev"); 
         } 
    
         <wsHttpBinding> 
          <binding name="WSHttpBinding_MyLocal" closeTimeout="00:01:00" 
           openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:20:00" 
    

    ...

    +0

    、ほとんどの人が今までに必要となる唯一のタイムアウトは' sendTimeout' https://social.msdn.microsoft.com/Forums/vstudio/en-ですUS/84551e45-19a2-4d0d-bcc0-516a4041943d /異なるタイムアウトの説明型 –

    関連する問題