每当我连接我的客户端以将数据发送到我的WCF Azure服务时,我都会收到此错误:
“已超出传入邮件的最大邮件大小限额(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>
但是,我没有这些服务端点,我的服务适用于小尺寸。
还需要设置其他地方吗?
修改
更多信息,Tim似乎在使用默认端点的正确轨道上。我正在使用默认端点。您似乎无法仅为该默认端点明确定义服务。或者如果可以的话,我必须做错了。
但是,您似乎可以按照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 :(得分:1)
属性名称maxReceivedMessageSize非常明确 - 这一切都取决于谁在接收消息 - 如果您要发送大量数据,那么它就是服务,如果您从服务中获取大量数据,那么它是客户。服务和客户端不需要此设置的相同值(与许多其他绑定设置不同)
设置一个未命名的绑定部分应该可以正常工作,因为在.NET 4中,它为没有使用bindingConfiguration显式指定配置的任何人配置绑定。但是,在上面的示例中,除了缓冲而不是流式传输消息之外,还需要在maxReceivedMessageSize之外设置maxBufferSize。 maxBufferSize和maxReceivedMessageSize必须相同
答案 1 :(得分:0)
您的服务端没有Web.config中的部分?如果您正在使用WCF 4.0,那么您是否可以使用默认端点?
我不知道您是否可以为默认端点指定绑定,但您可能希望尝试通过Web.config部分指定端点,并将bindingConfiguration设置为您的部分中指定的绑定。