0

この記事http://www.codeproject.com/Articles/166763/WCF-Streaming-Upload-Download-Files-Over-HTTPを読んで、 WCF経由で大きなファイルをアップロードしました。

同じ構成を作成しましたが、属性を追加してもファイルを48kbアップロードしただけですmaxReceivedMessageSize ="2147483647"。48kbを超えるファイルをアップロードしようとすると、エラーが発生しました

リモートサーバーがエラーを返しました:(413)リクエストエンティティが大きすぎます。

私は間違っていましたか、何かを逃しましたか?以下は私の設定です

サーバー構成:

<?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が発生します。以下は私のテストプロジェクトです。理由がわかりませんか?(環境:Window 7 Pro 64ビット、IIS7、WCF 4.0)

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

調査に2週間費やしましたが、同じエラーです。

私を助けてください。前もって感謝します。

4

3 に答える 3

2

クライアント構成も同じバインディング構成(より大きな転送サイズで) 定義し、エンドポイント構成でそのバインディング構成を指定する必要があります!

したがって、クライアント側の構成を次のように変更します。

<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>

次に、クライアントとサーバーで同じ設定を行う必要があります。そうすればそれらの設定が役立ちます!

于 2012-11-02T09:27:43.277 に答える
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>
于 2012-11-05T04:54:45.853 に答える
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>
于 2012-11-03T02:01:04.707 に答える