2011-06-17 94 views
1

每當我連我的客戶端將數據發送到我的WCF Azure的服務,我得到這個錯誤:maxReceivedMessageSize在Azure WCF服務太小

「的最大郵件大小配額傳入消息(65536)已超出。要增加配額 ,請在適當的綁定 元素上使用MaxReceivedMessageSize屬性。「

我讀過無處不在關於在客戶端和服務器配置文件上設置MaxReceivedMessageSize屬性。我已經做到了。

但是,每當我更新客戶端服務引用,它拉的設置恢復到65536默認(通過調查.svcinfo文件中)

這使我得出結論的問題,必須在服務方面。

我放在這在我的web.config文件:

<bindings> 
    <basicHttpBinding> 
    <!--The basicHttpBinding is used for clients which use the generated code to transmit data; the following settings make it possible to send larger amounts to the service--> 
    <binding maxReceivedMessageSize="10000000" receiveTimeout="01:00:00"> 
     <readerQuotas maxStringContentLength="10000000" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

現在,很多帖子談論命名綁定並在服務器端設置它在服務端點爲好。這樣的事情:

<services> 
    <service name="YourNamespace.YourServiceClass"> 
     <endpoint name="endpoint1" 
      address="http://server:8888/YourService.svc" 
      binding="basicHttpBinding" 
      bindingConfiguration="lageMessageTransfer" 
      contract="IYourServiceContract" /> 
    </service> 
</services> 

但是,我沒有這些服務端點,我的服務很適合小尺寸。

這需要設置在哪裏?

編輯:

更多信息,蒂姆似乎是在正確的軌道與默認端點上。我正在使用默認端點。看起來你不能明確地爲該默認端點定義一個服務。或者如果可以的話,我必須做的不正確。

但是,您似乎可以按照Richard的說法修改默認端點上的綁定。這是通過簡單地不指定綁定的名稱來完成的。我嘗試將服務中的值設置爲更低的值,以查看是否有其他值正在降低它們,但它們完全被忽略。它就好像默認端點簡單地忽略了我創建的綁定。

在我的整個配置文件:爲什麼沒有被拾起新的綁定設置

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
<system.diagnostics> 
<trace autoflush="true" /> 
<sources> 
    <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true"> 
    <listeners> 
     <add name="sdt" type="System.Diagnostics.XmlWriterTraceListener" initializeData="logging.e2e" /> 
    </listeners> 
    </source> 
</sources> 
</system.diagnostics> 
<system.web> 
<compilation debug="true" targetFramework="4.0"> 
    <assemblies> 
    <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    </assemblies> 
</compilation> 
</system.web> 
<system.serviceModel> 
<bindings> 
    <basicHttpBinding> 
    <binding maxReceivedMessageSize="100" maxBufferSize="100" receiveTimeout="00:11:00"> 
     <readerQuotas maxStringContentLength="100" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

<protocolMapping> 
    <add scheme="http" binding="basicHttpBinding" /> 
</protocolMapping> 

<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="false" /> 
</system.serviceModel> 
<system.webServer> 
<modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 
<connectionStrings><EDITEDOUT></connectionStrings> 
</configuration> 

的思考?

+0

不幸的是,據我所知,如果你不能修改服務的配置,就會陷入困境。如果您絕對無法修改服務的配置,則需要採取措施確保您的有效負載小於65536字節的最大值。 – GunnerL3510 2011-06-17 01:54:04

+0

我可以修改服務器的配置,但是它不會選擇新的設置。 – Jared 2011-06-17 22:50:54

回答

0

您的服務端沒有Web.config中的部分?如果您使用的是WCF 4.0,那麼您可能使用的是默認端點?

我不知道您是否可以爲默認端點指定綁定,但您可能需要嘗試通過Web.config部分指定端點並將bindingConfiguration設置爲您的部分中指定的綁定。

+0

我試圖明確地定義一個新的服務端點,沒有地址: <服務名稱= 「TimesheetService.TimesheetSvc」> <端點合同= 「爲MyService」 結合= 「basicHttpBinding的」 bindingConfiguration = 「MyBinding」/> 沒有運氣,雖然這看起來像它的正確道路。無論如何要追蹤並查看配置中是否有錯誤輸入? – Jared 2011-06-17 18:14:24

+0

你可以發佈整個配置文件嗎?機會是配置文件中不匹配的東西。 – Tim 2011-06-17 19:03:54

+0

與原始問題內嵌。 – Jared 2011-06-17 22:19:39

1

屬性名稱maxReceivedMessageSize非常明確 - 這一切都取決於誰在接收消息 - 如果您發送大量數據,那麼它就是服務,如果您從服務中獲取大量數據那麼它就是客戶。服務和客戶端對於此設置不需要相同的值(與許多其他綁定設置不同)

設置未命名的綁定部分應該與.NET 4一般工作,因爲它將配置綁定給任何不使用bindingConfiguration顯式指定一個配置。但是,在上面的示例中,除了緩衝而不是流式傳輸消息之外,還需要除maxReceivedMessageSize外還設置maxBufferSize。 maxBufferSize和maxReceivedMessageSize必須相同

+0

我也設置了maxBufferSize。同樣的問題。如果我查看每次更新服務引用時都會更新的configuration.svcinfo文件,則可以看到它仍在爲所有各種屬性拉取默認值。 – Jared 2011-06-17 18:02:09

+0

客戶端將看到默認值,因爲這些值在客戶端和服務上通常是不同的。正如我上面所說的,他們指的是數據的接收者。你可以試試這個:減少maxReceivedMessageSize和maxBufferSize,使它們低於默認值,併發送一條仍然可以工作的消息。但是,從服務中返回綁定實際的maxReceivedMessageSize只是爲了確保它沒有被拾取,而其他東西不是;不妨礙 – 2011-06-17 18:21:43

+0

((BasicHttpBinding)OperationContext.Current.Host.Description.Endpoints [0] .Binding)。 MaxReceivedMessageSize應該爲您提供您需要的內容 – 2011-06-17 18:23:44