WCF MaxReceivedMessageSize属性无效

4

搜索无果...

我一直收到以下提示:

传入消息的最大消息大小配额(65536)已超过。要增加配额,请在适当的绑定元素上使用MaxReceivedMessageSize属性。

这很有道理,所以我进入服务器和客户端配置并进行更改:

客户端

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IFileUpload"
           closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" transferMode="Streamed" messageEncoding="Text" maxBufferSize="65536" maxReceivedMessageSize="67108864">
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost/services/FileUpload.svc"
          binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFileUpload"
          contract="CFTW.FileUpload.IFileUpload" name="BasicHttpBinding_IFileUpload" />
    </client>
  </system.serviceModel>

服务器

    <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IFileUpload"

                 transferMode="Streamed" messageEncoding="Text" maxBufferSize="67108864" maxBufferPoolSize="67108864" maxReceivedMessageSize="67108864">

        </binding>
      </basicHttpBinding>

    </bindings>
    <services>
      <service name="BasicHttpBinding_IFileUpload">
        <endpoint address="~/services/FileUpload.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFileUpload"
            contract="CFTW.FileUpload.IFileUpload"></endpoint>
      </service>

    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

我不确定为什么它不工作(否则我会修复它的 :))。它运行在.NET 4.0 RC上。


如果您正在尝试进行文件上传(正如您的行为名称所示),我建议您查看WCF流而不仅仅是提高maxreceivedmessagesize参数... - marc_s
哦...我以为我正在进行WCF流传输。我以为这就是trasferMode="Streamed"的作用? - Steve Syfuhs
3个回答

3
我刚遇到了这个问题。我发现我的自定义绑定根本没有被应用。然后我在绑定标签中使用了name = ""。然后一切都开始按照新的设置工作了。这是因为.NET 4.0带有默认的绑定/端点/行为配置。这些默认设置具有name = ""。我只修改了默认绑定本身。我的自定义绑定(命名)未被应用的原因是由于<service>标记中名称的值。它应该遵循<Namespace.ServiceClassName>

1
你在客户端配置中设置了哪个绑定名称为""? - DevDave

2

您需要在客户端配置中增加maxReceivedMessageSize属性以适配绑定。同时,请确保将maxBufferSize设置为相同的值。对于缓冲连接,这两个值需要相同。


0

遇到了同样的问题,幸运的是在第二个项目中并且可以与正常工作的项目进行比较。不同之处在于正常工作的项目在web.config中为服务绑定设置了额外的属性...

正常工作的示例: httpsTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"

第二个项目只有: httpsTransport

还要在您的项目中搜索65536,因为它也在服务引用的configuration.svcinfo和configuration91.svcinfo中定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接