或者 - 至少我認爲正確的術語是有狀態的。我得到了一個wcf服務,將大量數據列回給我。事實上,這麼多的數據,我超過了maxrecievedmessagesize - 程序崩潰。WCF有狀態服務
我已經認識到我需要將調用拆分到數據庫。我不需要檢索5000行,而需要獲得第1 - 200行,記住行號200的編號,從行編號200的編號中獲取下一行200行,依此類推。
有誰知道如何做到這一點?是有狀態的(如在「無國界的對立面」)正確的路要走嗎?我將如何繼續......?有人能指點我一個例子嗎?
或者 - 至少我認爲正確的術語是有狀態的。我得到了一個wcf服務,將大量數據列回給我。事實上,這麼多的數據,我超過了maxrecievedmessagesize - 程序崩潰。WCF有狀態服務
我已經認識到我需要將調用拆分到數據庫。我不需要檢索5000行,而需要獲得第1 - 200行,記住行號200的編號,從行編號200的編號中獲取下一行200行,依此類推。
有誰知道如何做到這一點?是有狀態的(如在「無國界的對立面」)正確的路要走嗎?我將如何繼續......?有人能指點我一個例子嗎?
您的場景中不需要有狀態的服務。有狀態的服務最好避免,特別是當你想在那裏保存5000行時。
客戶端應該指定它需要多少數據。所以它可能是GetRows(index,amount)方法,其中索引是獲取行的開始索引和從開始索引開始的行數。
客戶端也應該詢問服務的數據狀態,服務只是發送數據狀態。例如,當您擁有這5000行時,您可以使用服務GetRowsState(索引,金額)的方法,以及相同的故事,它只是說您行的最後更新時間,當您收到更高時間或其他客戶時,然後再一次從GetRows服務器更新客戶端數據狀態。
如果可能,服務應始終爲**無狀態**。基本上,你的**調用者**應該負責指定他想要的行 - 1-100,101-200等等。 - 服務本身不需要知道關於狀態的任何信息。它只是返回客戶端請求的那些行。 –
@marc_s你是對的,服務應該最好是無狀態的,另一方面,將顯式行號傳遞給客戶端會暴露服務和底層數據庫的大部分內部狀態...,這也應該避免...但是,如果整行(帶ID)無論如何返回,那麼你是完全正確的,所以投票支持你 – Daniel
比方說,我得到1 - 100行,然後101 - 200,如果有人改變行58 ?我不會通過使用狀態來防止這種情況嗎? 而且 - 這是這種問題的最佳做法嗎? (使呼叫者決定獲得第1-100行,然後101-200) – myUser8519