无法通过nettcp绑定和transfermode =“buffered”上传大文件

时间:2014-09-04 04:52:09

标签: c# .net wcf .net-3.5 nettcpbinding

我有一个应用程序,在我的一个方法中,我将文件传输到服务器。

我可以轻松上传大约50 KB的文件。但我的最大限制大约是3 MB。

我的WCR服务托管在带有nettcpbinding的Windows服务中

我的Windows配置是

<configuration>  
  <system.serviceModel>
    <services>
      <service name="BTWAServerWindowsService.BatchManagementService"
               behaviorConfiguration ="BatchManagementService">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:9999/BatchManagementService" />
          </baseAddresses>
        </host>
        <endpoint name="BatchManagementServiceEndPoint"
        address =""
        binding="netTcpBinding"
        contract="BTWAServerWindowsService.IBatchManagementService">
        </endpoint>
        <endpoint name="BatchManagementServiceMetadataPoint" address="mex"
                binding="mexTcpBinding"
                contract="IMetadataExchange"/>
      </service>      
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="BatchManagementService">
          <serviceMetadata httpGetEnabled="False"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>       
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

我的客户端配置

<configuration> 
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="BatchManagementServiceEndPoint" closeTimeout="00:10:00"
          openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
          transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
          hostNameComparisonMode="StrongWildcard" listenBacklog="524288"
          maxBufferPoolSize="524288" maxBufferSize="524288" maxConnections="524288"
          maxReceivedMessageSize="524288">
          <readerQuotas maxDepth="524288" maxStringContentLength="524288"
            maxArrayLength="524288" maxBytesPerRead="524288" maxNameTableCharCount="524288" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Transport">
            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
            <message clientCredentialType="Windows" />
          </security>
        </binding>       
      </netTcpBinding>
    </bindings>
    <client>
      <endpoint address="net.tcp://localhost:9999/BatchManagementService"
        binding="netTcpBinding" bindingConfiguration="BatchManagementServiceEndPoint"
        contract="BTWABatchManagement.IBatchManagementService" name="BatchManagementServiceEndPoint" />      
    </client>
  </system.serviceModel>
</configuration>

目前我无法将transfermode更改为流式传输,因为还有其他一些方法

请建议我将文件限制增加到4 mb所需的配置更改是什么

1 个答案:

答案 0 :(得分:2)

在服务端app.config以及客户端app.config中对netTcpBinding中的以下属性进行更改

maxBufferPoolSize="1073741824" maxBufferSize="1073741824" maxConnections="10"
          maxReceivedMessageSize="1073741824">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />

这些属性的最大值为2147483647

<bindings>
      <netTcpBinding>
        <binding name="BatchManagementServiceEndPoint" closeTimeout="00:10:00"
          openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
          transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
          hostNameComparisonMode="StrongWildcard" listenBacklog="524288"
          maxBufferPoolSize="1073741824" maxBufferSize="1073741824" maxConnections="10"
          maxReceivedMessageSize="1073741824">
          <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Transport">
            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
            <message clientCredentialType="Windows" />
          </security>
        </binding>       
      </netTcpBinding>
</bindings>

希望这有帮助