私は、WindowsサービスによってホストされているWCFサービスと通信するASP.NetWebFormsアプリケーションの管理を任されています。サービスに使用されるバインディングはnetTcpBindingです。
このサービスは、「ファイル」をアップロードおよびダウンロードするためのメソッドを公開します。ユーザーがファイルのアップロードを選択すると、HttpPostFile.InputSteamがサービスの「Upload」メソッドのパラメーターとしてサービスに直接渡されます。このサービスは、ストリームをバイト配列としてデータベースに保存します[データベースフィールドのデータ型はvarbinary(max)です]。
ファイルのダウンロードデータフローは、基本的に逆のプロセスです。バイトはデータベースから取得されます。WCFサービスのMemoryStreamに読み込まれます。その後、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>