我需要从我的一个客户端向我的服务器发送大量文本。为此,我知道我需要在服务器上增加maxStringContentLength
。
我已经对此进行了大量搜索,似乎所有的修复程序都从第3步开始。
我似乎无法弄清楚步骤1和2 ......
有人可以带我走过这美好而又缓慢的事。鉴于我的Web.config,我如何设置maxStringContentLength
?
这是我的Web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<directoryBrowse enabled="true" />
</system.webServer>
</configuration>
背景资料:
答案 0 :(得分:4)
您必须修改服务端点上使用的绑定的属性。由于您未在配置文件中提供任何内容,因此WCF 4.0为automatically going to add a default endpoint for each service contract and base address defined in the host.如果服务托管在IIS中,则基本地址为虚拟目录。
默认端点上使用的绑定在<protocolMapping>
元素中定义。在机器级别,映射是:
<protocolMapping>
<add scheme="http" binding="basicHttpBinding"/>
<add scheme="net.tcp" binding="netTcpBinding"/>
<add scheme="net.pipe" binding="netNamedPipeBinding"/>
<add scheme="net.msmq" binding="netMsmqBinding"/>
</protocolMapping>
在您的情况下,除非已覆盖默认映射,否则WCF将使用basicHttpBinding基于http://myserver/Orders
虚拟目录创建默认HTTP端点。
您可以通过提供默认绑定配置,即无名配置来修改basicHttpBinding的maxStringContentLength
属性,该配置将自动生成使用该绑定应用于所有端点。
只需将此元素添加到<system.serviceModel>
部分中的Web.config:
<bindings>
<basicHttpBinding>
<binding maxReceivedMessageSize="SomeIntegerValue">
<readerQuotas maxStringContentLength="SomeIntegerValue" />
</binding>
</basicHttpBinding>
</bindings>
请注意,MSDN recommends要将maxStringContentLength和maxReceivedMessageSize属性设置为相同的值:
maxStringContentLength
属性的值不能更大 而不是maxReceivedMessageSize
属性的值。我们推荐 这两个属性的值是相同的。
如果这不起作用,您可以通过在Web.config中添加<protocolMapping>
元素来显式定义要用于默认HTTP端点的绑定,并相应地调整绑定配置:
<protocolMapping>
<add scheme="http" binding="basicHttpBinding"/>
</protocolMapping>
答案 1 :(得分:2)
要举例说明我在评论中所说的内容,请在web.config的<system.serviceModel>
部分中执行以下操作。
首先,在配置文件中指定绑定配置 - 例如:
<bindings>
<wsHttpBinding>
<binding name="MyWsHttpBinding" closeTimeout="00:05:00"
openTimeout="00:05:00"
receiveTimeout="00:05:00"
sendTimeout="00:05:00"
transactionFlow="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288"
maxReceivedMessageSize="5242880">
<readerQuotas maxDepth="32"
maxStringContentLength="5242880"
maxArrayLength="16384"
maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
</binding>
</wsHttpBinding>
</bindings>
接下来,您需要将以上配置分配给您的端点:
<services>
<service behaviorConfiguration="MyServiceBehavior" name="MyService">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="MyWsHttpBinding"
contract="MyCompany.IMyService" />
</service>
</services>
重要的是要记住通过bindingConfiguration
将绑定配置的名称分配给端点,否则您将获得所选绑定的默认值。
另外,请查看以下有关WCF 4.0的默认端点和绑定的文章 - A Developer's Introduction to Windows Communication Foundation 4