WCF客户端 - 仅从WCF服务返回的首255个字节包含值
-
02-10-2019 - |
题
我的任务是照顾一个ASP.NET WebForms应用程序,该应用程序与Windows服务托管的WCF服务通信。该服务使用的绑定是NetTCBinding。
该服务公开了上传和下载“文件”的方法。用户选择上传文件,然后将httppostfile.inputSteam直接传递给服务,作为服务“上传”方法中的参数。该服务将流作为数据库的字节数组保存为[数据库字段数据类型为varbinary(max)]。
文件下载数据流本质上是反向过程。从数据库中检索字节;加载到WCF服务中的内存流中;然后返回Web应用程序。
我在上述操作中的每个步骤中捕获了流中所包含的数据(已发送 /接收) - 客户端(Web应用程序)和服务。我已经循环浏览并写入每个流中包含的字节的平面文件。
每种情况下的字节数组都是相同的[字节值;除文件下载操作外,流中的字节数。在流从WCF服务返回到Web应用程序的点。这里收到的字节数是正确的,但只有前255个字节填充。其余字节的值为零
我认为,在服务客户端,我都对绑定值进行了许多实验更改,因为我认为问题必须在这里。迄今为止,我还没有以任何方式影响返回的字节的状态。客户和服务的日志没有显示任何例外或任何其他问题。
我在为客户端和服务器应用程序设置正确的绑定(和其他配置)属性的正确组合方面没有太多经验 - 过去依赖于默认值。我们需要配置服务和客户端以传输最大允许的文件大小。不幸的是,我无法使用MTOM。
这 帖子和链接,没有给我任何见解。到目前为止,我还没有找到其他帮助的信息。
希望有人可以帮助我解决问题。以下是我正在使用的绑定:
客户端[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>
解决方案
傻我。我想我已经知道了。
绑定还可以。我没有正确地从流中读取字节到客户端的缓冲区。