WCF Streaming无法传输大文件

时间:2013-03-14 10:05:49

标签: wcf streaming file-transfer

我正在制作用于传输文件的WCF服务。我只有基本的WCF理解,并遵循MSDN教程:WCF Tutorial 我开始使用字节数组来传输文件,但是一旦文件变得有点大(100kb足够),它就会因为错误的请求而失败。 我跟着另一个指南并改为使用消息进行流式处理,它也可以处理小文件,但是像旧版本那样更大。我怀疑错误在于我的配置文件,因为svcutil.exe生成的文件没有说任何关于流媒体的内容。 这是我的客户app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
    <bindings>
        <wsHttpBinding>
            <binding name="WSHttpBinding_IDocPublisher" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
                bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                maxBufferPoolSize="200000000" maxReceivedMessageSize="200000000"
                messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                allowCookies="false">
                <readerQuotas maxDepth="200000000" maxStringContentLength="200000000" maxArrayLength="200000000"
                    maxBytesPerRead="200000000" maxNameTableCharCount="200000000" />
                <reliableSession ordered="true" inactivityTimeout="00:10:00"
                    enabled="false" />
                <security mode="Message">
                    <transport clientCredentialType="Windows" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="Windows" negotiateServiceCredential="true"
                        algorithmSuite="Default" />
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:8000/ServiceModelSamples/docPublisherWebService/docPublisher"
            binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IDocPublisher"
            contract="IDocPublisher" name="WSHttpBinding_IDocPublisher">
            <identity>
                <userPrincipalName value="Emil-PC\Emil" />
            </identity>
        </endpoint>
    </client>
</system.serviceModel>
</configuration>

这是服务器app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
  <serviceBehaviors>
    <behavior name="serviceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"
                          httpHelpPageEnabled="true" />
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<services>
  <service behaviorConfiguration="serviceBehavior"
              name="DocPublisher">
    <endpoint address="http://localhost:8000/ServiceModelSamples/docPublisherWebService"
              name="basicHttpStream"
              binding="basicHttpBinding"
              bindingConfiguration="httpLargeMessageStream"
              contract="IDocPublisher" />
    <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange"/>
  </service>
</services>
<bindings>
  <basicHttpBinding>
    <binding name="httpLargeMessageStream"
                maxReceivedMessageSize="200000000"
                maxBufferSize="200000000"
                transferMode="Streamed"
                messageEncoding="Mtom" />
  </basicHttpBinding>
</bindings>
</system.serviceModel>
</configuration>

2 个答案:

答案 0 :(得分:1)

尝试在客户端增加发送超时和读者配额,在服务器端设置缓冲区大小。

答案 1 :(得分:1)

原来配置文件不是真正的问题,问题是服务器app.config从未使用过,因为msdn教程不使用app.config但是在main方法中创建了端点。