WCF休息400坏请求图像大小

本文关键字:图像 请求 休息 WCF | 更新日期: 2023-09-27 18:10:03

我已经到处搜索并尝试了所有的解决方案,但似乎没有什么适合我。当上传大于64k的图像时,我得到了400k的请求。它在工作,然后突然停止工作。无需更改代码或更改配置文件。还有什么会影响配置文件的设置?这是我的配置文件

<system.web>
    <customErrors mode="Off"/>
    <compilation debug="true" targetFramework="4.0" />
    <httpRuntime maxRequestLength="2147483647"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="webHttpBehavior" name="EzFindWCFService.EZFindWebService">
        <endpoint address="" behaviorConfiguration="EzFindWCFService.EZFindWebServiceAspNetAjaxBehavior"
          binding="webHttpBinding" contract="EzFindWCFService.EZFindWebService" />
      </service>
    </services>
    <behaviors>

      <endpointBehaviors>
        <behavior name="EzFindWCFService.EZFindWebServiceAspNetAjaxBehavior">
          <!--<enableWebScript />-->
          <webHttp/>
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="webHttpBehavior">          
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
    <bindings>
      <basicHttpBinding>
        <binding name="webHttpBinding" closeTimeout="00:10:00" openTimeout="00:10:00"
          receiveTimeout="00:10:00" sendTimeout="00:05:00" allowCookies="false"
          bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
          maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
          messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
          useDefaultWebProxy="true">
          <readerQuotas maxDepth="64" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
  </system.serviceModel>

WCF休息400坏请求图像大小

在系统中。serviceModel/services/service你把绑定设置为"webHttpBinding",但是你没有定义一个bindingConfiguration。问题是你没有在system.serviceModel/bindings中设置webHttpBinding。您设置了一个basicHttpBinding,并将其名称设置为webHttpBinding!所以事实上,这个完整的绑定没有被使用,因为你的service-element寻找一个默认的(因为你没有定义一个bindingConfiguration) webHttpBinding,而不是一个名为webHttpBinding的basicHttpBinding !这就是为什么大于64k的文件上传失败的原因。因为这将超过默认的64k配额。我希望你能理解我:)混合默认绑定名称很容易出错;)

更新:

这个系统。servicmodel - section应该工作:

<services>
  <service name="EzFindWCFService.EZFindWebService" 
           behaviorConfiguration="webHttpBehavior" >
    <endpoint address="" 
              binding="webHttpBinding" bindingConfiguration="ConfigWebHttp"
              behaviorConfiguration="EzFindWCFService.EZFindWebServiceAspNetAjaxBehavior"
              contract="EzFindWCFService.EZFindWebService" />
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="EzFindWCFService.EZFindWebServiceAspNetAjaxBehavior">
      <!--<enableWebScript />-->
      <webHttp/>
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="webHttpBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <dataContractSerializer maxItemsInObjectGraph="2147483647" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <webHttpBinding>
    <binding name="ConfigWebHttp"
             openTimeout="00:10:00" closeTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:05:00"
             maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="64" maxStringContentLength="2147483647" maxArrayLength="2147483647" 
                    maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </webHttpBinding>
</bindings>

我省略了一些默认设置(例如绑定/安全),使配置更精简。还有一件事:我会小心地将所有这些配额设置为Int32.MaxValue。对于测试来说可能没问题,但是当您进入生产环境时,请记住设置这些值。