WCF客户端 - 仅从WCF服务返回的前255个字节的流包含值

时间:2010-09-12 16:10:13

标签: wcf wcf-binding wcf-client wcfserviceclient

我的任务是管理一个ASP.Net WebForms应用程序,该应用程序与Windows服务托管的WCF服务进行通信。用于服务的绑定是netTcpBinding。

该服务公开了上传和下载'文件'的方法。用户选择上传文件,HttpPostFile.InputSteam作为服务“上传”方法中的参数直接传递给服务。该服务将流作为字节数组保存到数据库[数据库字段数据类型为varbinary(max)]。

文件下载数据流本质上是相反的过程。从数据库中检索字节;加载到WCF服务中的MemoryStream中;然后返回Web应用程序。

我已经在上述操作的每一步 - 客户端(Web应用程序)和服务上捕获了流中包含的数据(已发送/已接收)。我已经循环并向平面文件写出每个流中包含的字节。

每种情况下的字节数组都是相同的[字节值;和文件下载操作除外的流中的字节数。在流从WCF服务返回到Web应用程序的位置。这里接收的字节数是正确的,但只填充前255个字节。剩余字节的值为零

我对绑定值进行了大量实验性更改 - 在服务中的客户端 - 因为我认为问题必须在这里。到目前为止,我还没有影响以任何方式返回的字节的状态。客户端和服务的日志不会显示任何抛出任何异常或任何其他问题。

我在为客户端和服务器应用程序设置正确的绑定(和其他配置)属性组合方面没有太多经验 - 过去依赖于默认值。我们需要配置服务和客户端以传输最大允许文件大小。不幸的是我无法使用MTOM。

This帖子和链接,没有给我任何见解。到目前为止,我没有找到任何有用的信息。

希望有人可以帮我解决问题所在。以下是我正在使用的绑定:

客户端[web.config]:

  <bindings>  
         <netTcpBinding>
            <binding name="TCP"  
                       closeTimeout="00:01:00" 
                       openTimeout="00:10:00"
                       receiveTimeout="00:01:00" sendTimeout="00:01:00" 
                       transferMode="Streamed" 
                       maxBufferPoolSize="512"
                       maxBufferSize="2147483647" 
                       maxConnections="10" 
                       maxReceivedMessageSize="2147483647">     

               <readerQuotas maxDepth="32" 
                             maxStringContentLength="2147483647" 
                             maxArrayLength="2147483647"
                             maxBytesPerRead="4096" 
                             maxNameTableCharCount="2147483647" />
               <reliableSession ordered="true" inactivityTimeout="00:10:00"
                 enabled="false" />
               <security mode="Transport">
                  <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
                  <message clientCredentialType="Windows" />
               </security>
            </binding>
         </netTcpBinding>

服务:

<netTcpBinding>
        <binding name="netTCP"
                 closeTimeout="00:01:00"
                 openTimeout="00:01:00"
                 receiveTimeout="00:01:00" sendTimeout="00:01:00"
                 transferMode="Streamed"
                 listenBacklog="30"
                 maxBufferPoolSize="512"
                 maxBufferSize="2147483647"
                 maxConnections="30"
                 maxReceivedMessageSize="2147483647"
                 portSharingEnabled="true">
          <readerQuotas maxDepth="32"
                        maxStringContentLength="2147483647"
                        maxArrayLength="2147483647"
                        maxBytesPerRead="4096"
                        maxNameTableCharCount="2147483647" />
        </binding>
      </netTcpBinding>

1 个答案:

答案 0 :(得分:0)

傻傻的我。我想我已经明白了。

绑定没问题。我没有处理从流中正确读取字节到客户端上的缓冲区。