2012-11-02 101 views
0

我阅读这篇文章​​通过WCF上传大文件。WCF流媒体大文件

我创建了相同的配置,但我刚刚上传文件48kb,甚至我添加了属性maxReceivedMessageSize ="2147483647"。当我尝试上传超过48kb的文件时,出现了错误

The remote server returned an error: (413) Request Entity Too Large.

我收到错误或错过了什么吗?下面是我的配置

服务器配置:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <httpRuntime executionTimeout="4800" maxRequestLength="2097150"/> 
    </system.web> 
    <system.serviceModel> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    <!--BINDING--> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="TransferService" 
       closeTimeout="00:10:00" 
       maxBufferPoolSize="2147483647" 
       maxBufferSize="2147483647" 
       maxReceivedMessageSize ="2147483647" 
       openTimeout="00:10:00" 
       receiveTimeout="00:10:00" 
       sendTimeout="00:10:00" 
       messageEncoding="Text" 
       transferMode="Streamed" 
       > 
      <readerQuotas 
      maxDepth="2147483647" 
      maxStringContentLength="2147483647" 
      maxBytesPerRead="2147483647" 
      maxNameTableCharCount="2147483647" 
      maxArrayLength="2147483647"/> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 

    <!--SERVICE--> 
    <services> 
     <service name="TransferService.TransferService" 
       behaviorConfiguration="TransferServiceBehavior" > 
     <endpoint 
      address="" 
      binding="basicHttpBinding" 
      bindingConfiguration="TransferService" 
      contract="TransferService.ITransferService" > 
     </endpoint> 
     </service> 
    </services> 

    <!--BEHAVIOR--> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="TransferServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
      <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" maxConcurrentInstances="500" /> 
     </behavior> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
<system.webServer> 
    <security> 
    <requestFiltering> 
     <requestLimits maxAllowedContentLength="500000000"></requestLimits> 
    </requestFiltering> 
    </security> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 

Web客户机的配置:

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpBinding_ITransferService" /> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint name="BasicHttpBinding_ITransferService" 
      address="http://localhost/transfer/TransferService.svc" 
      binding="basicHttpBinding" 
      bindingConfiguration="BasicHttpBinding_ITransferService" 
      contract="TransferService.ITransferService" /> 
    </client> 
    </system.serviceModel> 

请提出解决方案。

在此先感谢


现在我的配置改变您的建议,但它仍然提出同样的错误400或413以下是我的测试项目。我不知道为什么? (环境:微软Windows 7专业版64位,IIS7,WCF 4.0)

https://skydrive.live.com/redir?resid=BFE92959302FBAA0!105&authkey=!ANO_URChpql9gKE

我花了两个星期的时间研究和,但它同样的错误。

请帮帮我。提前致谢。

+0

你应该使用另一个协议来做到这一点像NetTCp ...不要使用basicHTTP发送文件 –

回答

1

好了,客户端配置必须也定义了相同的绑定配置(具有较大传输大小),并指定在其端点配置绑定配置!

因此改变你的客户端配置来:

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="TransferService" 
       closeTimeout="00:10:00" 
       maxBufferPoolSize="2147483647" 
       maxBufferSize="2147483647" 
       maxReceivedMessageSize ="2147483647" 
       openTimeout="00:10:00" 
       receiveTimeout="00:10:00" 
       sendTimeout="00:10:00" 
       messageEncoding="Text" 
       transferMode="Streamed" 
       > 
      <readerQuotas 
      maxDepth="2147483647" 
      maxStringContentLength="2147483647" 
      maxBytesPerRead="2147483647" 
      maxNameTableCharCount="2147483647" 
      maxArrayLength="2147483647"/> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 

    <client> 
     <endpoint name="BasicHttpBinding_ITransferService" 
      address="http://localhost/transfer/TransferService.svc" 
      binding="basicHttpBinding" 
      bindingConfiguration="TransferService" 
      contract="TransferService.ITransferService" /> 
    </client> 
    </system.serviceModel> 

,然后你应该在客户端和服务器上相同的设置,并然后这些设置会成为有用的!

+0

我复制了相同的配置,然后添加到我的Web客户端配置中。但我提出错误远程服务器返回一个错误:(400)错误的请求。 – nvtthang

0

我面临同样的问题。而我用这个代码,配置文件,然后我可以上传25MB的文件 试试这个

<system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="webserviceMOSSuiteSoap" 
       closeTimeout="00:01:00" 
       maxBufferPoolSize="20000000" 
       maxBufferSize="20000000" 
       maxReceivedMessageSize="20000000" 
       openTimeout="00:01:00" 
       receiveTimeout="00:10:00" 
       sendTimeout="00:01:00" 
       messageEncoding="Text" 
       transferMode="Buffered" 
       allowCookies="false" 
       bypassProxyOnLocal="false" 
       hostNameComparisonMode="StrongWildcard"       
       textEncoding="utf-8"      
       useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" 
          maxStringContentLength="20000000" 
          maxArrayLength="20000000" 
          maxBytesPerRead="20000000" 
          maxNameTableCharCount="20000000"/> 
       <security mode="None"> 
       <transport clientCredentialType="None" 
        proxyCredentialType="None" 
        realm=""/> 
      <message clientCredentialType="UserName" 
       algorithmSuite="Default"/> 
          </security> 
        </binding> 
      </basicHttpBinding> 
     </bindings> 
<client>  
     <endpoint address="http://localhost/WebServiceConnect/webservice.asmx" 
        binding="basicHttpBinding" 
        bindingConfiguration="webserviceMOSSuiteSoap" 
        contract="ServiceReference1.webserviceMOSSuiteSoap" 
        name="webserviceMOSSuiteSoap"/> 
    </client> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
           multipleSiteBindingsEnabled="true"/> 
</system.serviceModel> 
1

我检查你的项目,与此更换你的webconfig和更新服务引用再试一次,

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    <httpRuntime executionTimeout="4800" maxRequestLength="2097150"/> 
    </system.web> 
    <system.serviceModel> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    <!--BINDDING--> 
    <bindings> 
     <basicHttpBinding> 
     </basicHttpBinding> 
     <customBinding> 
     <binding name="LargeSilverlight" closeTimeout="00:21:00" openTimeout="00:20:00" 
      receiveTimeout="00:20:00" sendTimeout="00:50:00"> 
      <textMessageEncoding maxReadPoolSize="2147483647" maxWritePoolSize="2147483647"> 
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
       maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
      </textMessageEncoding> 
      <httpTransport maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" 
      maxBufferSize="2147483647" /> 
     </binding> 
     </customBinding> 
    </bindings> 
    <client> 
    </client> 
    <!--SERVICE--> 
    <services> 
     <service name="TransferService.TransferService" behaviorConfiguration="SilverlightWCFLargeDataApplication" > 
     <endpoint address="" binding="customBinding" bindingConfiguration="LargeSilverlight" behaviorConfiguration="SilverlightWCFLargeDataApplication" contract="TransferService.ITransferService" > 
     </endpoint> 

     </service> 
    </services> 

    <!--BEHAVIOR--> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="SilverlightWCFLargeDataApplication"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
     </behavior> 

     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="SilverlightWCFLargeDataApplication"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 


    </system.serviceModel> 
    <system.webServer> 

    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="500000000"></requestLimits> 
     </requestFiltering> 
    </security> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 
+0

好工作Sanjeetharan,+1 – Vinnie