我正在從窗體調用WCF服務。服務在IIS中託管。具有以下屬性的服務:InstanceContextMode.PerSession,ConcurrencyMode = ConcurrencyMode.Multiple使用IIS和Asynch方法的WCF的最大併發會話 - 釋放資源
對於所有併發調用,實例和會話,我已將限制行爲設置爲最大值爲2000。
但是我似乎無法獲得超過200個ASYNCH請求。之後,該服務不響應,會話最終超時。
我使用的非同步調用來調用服務的方法,即 崩潰|複製代碼
IASyncResult res = Proxy.BeginMethod(endCall,null);
然後趕上我有一個結束呼叫函數,它在IAsyncResult的和經由EndMethod處理()的結果的響應。
在負載模擬@ 1種方法撥打第二個電話,這一切工作正常,直到大約200元話費,然後只是等待......(我從那些200個電話199級或198的響應在這個時間點).. - 理論上不應該有200個併發會話,只有2個左右..
也許有一些垃圾收集或關閉,我不是在做什麼? 有什麼建議嗎?
----更新---
我想答案也許更多的是代理的關閉在一個線程安全的方式不被處理。正如Radik在上面指出的那樣,關閉代理非常重要,但是,在同時出現許多IASyncState結果時,您必須確保在正確的時間關閉正確的代理。
我曾嘗試從一個線程發射了緊密的代理,讓它分開處理:
ThreadPool.QueueUserWorkItem(CloseProxy,ar.AsyncState);
但這似乎並不奏效。對此有何建議?
您是否正確關閉連接?看到如何 [closing-wcf-connection](http://stackoverflow.com/questions/1400010/closing-wcf-connection) – Radik
我不能使用Close(),因爲這將關閉整個連接,當仍然存在異步操作結果回來...... 我做執行Asynchwaithandle.close() 這沒有幫助,但... – Faroukg