2009-12-09 65 views
3

我已經創建了一個WCF服務,該服務在W2008服務器上運行一個操作並作爲結果返回一個數據結構。問題是,這個結果可能比標準服務配置似乎接受的要大。所以我試圖增加(或刪除)這個最大尺寸,但看起來,我沒有找到正確的屬性。移除WCF服務答案的大小限制

在WCF的App.config中,我改變了我的basicHttpBinding的以下值:

  • MaxBufferPoolSize - > 6553600
  • MAXBUFFERSIZE - > 6553600
  • MaxReceiveMessageSize - > 6553600

ReaderQuotas:

  • MaxArrayLenght - > 0
  • MaxBytesPerRead - > 0
  • MAXDEPTH - > 0
  • MaxNameTableCharCount - > 0
  • MaxStringContentLength - > 0

然後我開始WCF的TestClient的調用服務。我確信,basicHttpBinding的屬性值等於配置中的值。當我以某種方式調用服務時,結果集相當小,一切正常。但是當這個大小增加時,我最終得到錯誤(從德語翻譯):

接收http答案http://localhost:8731/Design_Time_Addresses/DiscoDataSource/Service1/時出錯。可能的原因:端點綁定不使用HTTP協議,或HTTP-requestcontext被服務器取消。

服務器堆棧跟蹤:

在System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(引發WebException引發WebException,HttpWebRequest的請求,HttpAbortReason abortReason)

在System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (時間跨度超時)

在System.ServiceModel.Channels.RequestChannel.Request(消息消息,時間跨度超時)

System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息消息,時間跨度超時)

在System.ServiceModel.Channels.ServiceChannel.Call(字符串動作,布爾單向,ProxyOperationRuntime操作,對象[]項,對象[]奏,時間跨度超時)

在System.ServiceModel.Channels.ServiceChannel.Call(字符串動作,布爾單向,ProxyOperationRuntime操作,對象[]項,在System.ServiceModel.Channels對象[]奏)

。 ServiceChannelProxy.InvokeService(IMethodCallMessage方法調用,ProxyOperationRuntime操作)

at System.ServiceModel.Channels.ServiceChannelProxy。調用(IMessage消息)

我想將服務配置爲返回結果,而不管大小。任何人都知道,我需要改變配置?

由於提前, 弗蘭克

回答

6

如果您有大量正在序列化的對象,WCF將達到配置的限制和barf。你已經嘗試了所有的標準項目,但是你忽略了一個:maxItemsInObjectGraph。就像其他配置值一樣,您需要將其設置爲服務器端客戶端。下面是一個示例配置SNIPPIT與不必要的巨大價值:

<system.serviceModel> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehavior"> 
     <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
    </behavior> 
    </serviceBehaviors> 
    <endpointBehaviors> 
    <behavior name="ClientBehavior"> 
     <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
    </behavior> 
    </endpointBehaviors> 
</behaviors> 
</system.serviceModel> 

我顯然忽略了很多的標籤有利於出在哪裏maxItemsInObjectGraph出現在你的config文件。

+0

Whoho!你擊中了頭部,非常感謝!它現在的作品:) – Aaginor 2009-12-09 16:18:08

+0

很高興成爲服務。 :) – Randolpho 2009-12-09 19:07:53

2

你有沒有在客戶端和服務器端都還有上改變這些值?你需要在通信的兩端改變它們 - 只有這樣它才能工作。

如果您在服務器端沒有更改它們,則兩者(客戶端和服務器值)中的較小值將「獲勝」。

但是,也許它只是您的超時設置導致服務器中止。在綁定時,可以調整超時時間 - 默認情況下爲60秒 - 所以如果根據需要抓取數據並進行組裝需要更多時間,則需要在綁定上調整SendTimeout,而不是大小設置。 ...

+0

Yap,正如我上面提到的,我確信WCF-Testclient的配置的basicHttpBinding的屬性等於app.config的配置。 所有超時設置爲「10:00:00」(也在兩側) – Aaginor 2009-12-09 15:51:46