我有一個長時間運行的方法(做各種生物學相關的查詢和比對和奇怪的東西的)的WCF服務。MaxConcurrentCalls,我如何告訴客戶端其呼叫已排隊? basicHttpBinding的
該代碼利用了一個方法調用的RAM和CPU好,所以讓太多的併發呼叫只是停滯不前下來的記憶。所以我真的不介意將MaxConcurrentCalls設置爲1.(我現在有它在3這是OK)。
我擔心的是,當該方法被調用和排隊,我想我的客戶立刻知道它得到了排隊。那可能嗎?
或者只是沒有將其排入所有,並與一些故障做出反應,這可能嗎?
至少,我想,如果客戶端斷開連接或超時我想它不處理,這可能嗎? (我想,如果超時,可能實際上無法處理,但如果我給它喜歡在同一時間6個請求,然後關閉所有似乎客戶喜歡它運行-eventually-所有6個請求,我縮短超時和我認爲它可能沒有全部運行6,我將不得不調查更多)
我只是不希望客戶端旋轉3分鐘(我們的超時 - 只有在事情排隊時纔打中),然後處理超時3分鐘後。我寧願它只是識別隊列已滿,說盡量回來以後馬上,也許我們可以增加我們的超時(但我會想馬上說「嘿,你是排隊,可能需要一段時間」)。我絕對不希望它超時,所以客戶端等待並且沒有任何東西,它仍然在後端處理。
我看到了的net.tcp將ListenBackLog設置的設置一些東西,但我們使用不同的結合,將我們要切換?切換工作?
爲什麼沒有服務方法檢查「隊列」是否已滿,並返回一個SOAP錯誤? – Tim
我很喜歡這個,但我沒有看到任何地方/如果有可能檢查隊列。當您設置MaxConcurrentCalls時,WCF處理隊列,它會通過max將呼叫發送到隊列中。但我似乎沒有控制它。 –
在處理呼叫之前,您無法發送任何信息。您需要實現自己的方法,如id enqueue()getstatus(id),而不是立即調用longmethod()。 – fdafadf