2011-01-20 14 views
2

私はWCFサービスを呼び出すasp.netアプリケーションを持っています。私はしばらくの間断続的なタイムアウトが発生しているので、トレースログを作成することにしました。タイムアウトを取得した後、私は、ログファイルに以下のメッセージが見つかりました:システムWCFエラー - システムがスロットル 'MaxConcurrentSessions'の制限に達しました

を スロットル「MaxConcurrentSessions」に設定された制限をヒット。このスロットル用 限界は10 スロットル値に設定された挙動 ServiceThrottlingBehaviorの「MaxConcurrentSessions」 プロパティを変更 serviceThrottle要素または によって修正属性 「maxConcurrentSessions」によって変更することができます。

私はクライアント接続を毎回閉じていますが、なぜ同時セッションが追加されているのかわかりません。以下は私が作る典型的な呼び出しです:

try 
    { 
     //create proxy 
     client = new CAEServiceContractClient(); 

     response = client.GetSecurityRecords(item); 
     totalRecords = response.TotalRecords; 

     securityListView.DataSource = response.SecurityItemColl; 
     securityListView.DataBind(); 

     // Always close the client. 
     client.Close(); 
     success = true; 
    } 
    finally 
    { 
     if (!success) 
     { 
      client.Abort(); 
     } 
    } 

だから私の質問は、なぜ)私はclient.Closeを(実行後に破壊されたセッションではありませんか?

TIA。

+0

あなたはどんなbidningを使用しますか?エラー発生時にサイトにアクセスするクライアントの数 –

+0

@ラディスラフ明日はチェックしますが、私はそれがwsHttpBindingだとかなり確信しています –

+0

@ラディスラフ私たちはまだ開発中ですので、エラーが発生したときにサービスにアクセスするのは私だけです。 –

答えて

1

上記のコードでローカル変数として宣言されているsuccessが表示されず、falseに設定されていません。それは最初の成功したコールでtrueに設定されているクラスメンバーかもしれませんし、そのように滞在していますか? using文がusingブロックが完了したときにことを保証

using (var client = new CAEServiceContractClient()) 
{ 
    response = client.GetSecurityRecords(item); 
    totalRecords = response.TotalRecords; 

    securityListView.DataSource = response.SecurityItemColl; 
    securityListView.DataBind(); 
} 

(通常:このような任意の場合には、その全体のコードブロックは、理解が簡単(と少ないバグが発生しやすい)であることを書き換えることができ

または異常に異常に発生した場合)、client変数が破棄され(.Dispose())、接続が終了します。

EDIT:ラディスラフMrnkaが指摘したように、ClientBase.Dispose()方法は、いくつかのケースでは、例外を投げるの悪い癖を持っています。 hereのように、部分CAEServiceContractClientクラスに.Dispose()メソッドを実装するようにしてください。

+3

@Allon:これはWCFアンチパターンです! http://omaralzabir.com/do-not-use-using-in-wcf-client/ –

+0

@Ladislav:これは反パターンではなく、単に 'ClientBase'クラスの悪い設計です(最初の3つのコメントを読んでください)。あなたがリンクした記事)。しかし、私の注意を引くことに感謝し、私はそれについて知らなかった。私はまだ[マットの提案]が好きです(http://stackoverflow.com/questions/573872/what-is-the-best-workaround-for-the-wcf-client-using-block-issue/1424384#1424384)。 –

+0

@Allon:はい、その提案はとても良い解決策です。私は最初のコメントを投稿するときにそれを見つけることができませんでした。ここに公式のMSDN記事があります:http://msdn.microsoft.com/en-us/library/aa355056aspx –

関連する問題