WCF はデータ送信に役立ちます。しかし、大容量のデータ転送が必要になったことがある人はいるでしょうか?正しく設定されている限り、WCF はビッグデータを送信できます。
クライアントからWCFサーバーに大規模なデータ(>65535B)を送信する際、サーバー上のServiceの実際のロジックに入らずに、ReferenceのBeginInvokeからEndInvokeに直接ジャンプしてしまう可能性があることが判明しました。大きすぎて制限を超えています。
問題は、実際に送信したデータが WCF サーバーから受信しただけであるということです。データの送受信の量に大きな違いはありません。
その後、実際にはクライアントとサーバーで異なる構成が使用されていることがわかりました。クライアントでは、ビッグ データの WCF 送信を実装するために ServiceReference を追加するときに自動的に生成される ServiceReferences.ClientConfig ファイルの system.serviceModel セクションにそのような設定があります。 :
<バインディング>
maxBufferSize="2147483647"> ="なし" />
< /basicHttpBinding>
< /bindings> 次に、クライアント セクションの構成を適用します。
<
localhost:22000/Service/WcfService.svc binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_WcfService"
contract="WcfServiceReference.WcfService"
name="BasicHttpBinding_WcfService" />
キャッシュバイトの最大数と受け入れられる最大ワード数はバインディングで指定されます。セクション数は2G相当!テレビシリーズ全体を送信しない限り、通常は十分です。
サーバー側では、Web.config ファイルの Bindings セクションが空で、サービスは bindingConfiguration 属性を指定していないため、デフォルトのサイズ 65535 が使用されます。
問題が見つかり、WCF がビッグ データを送信する問題を解決するのが簡単になります。
[バインディング] セクションに新しいバインディング設定を追加し、受け入れられるデータの最大値を指定します。 &lt;次に、対応するサービス
bindingConfiguration 属性を指定します。
< service behaviourConfiguration=
"Server.Service.WcfServiceBehavior"
"LargeDataTransferServicesBinding"
contract="Server.Service.WcfService" /> エンドポイント アドレス="mex" binding=
クライアントからのビッグデータを十分に送信できます。
追記:
.net はデフォルトで 4M ファイルしか転送できないため、Wcf の両端の構成が設定されていても、依然として .net の制限を超えることはできないため、大きなファイルを転送したい場合は、 System.Web セクションに移動します。 さらに
< httpRuntimemaxRequestLength="102400" />
ここでの単位は KB であるため、100M のファイルを転送でき、WCF がビッグ データを送信する問題は完全に解決されます。もちろん、このような大きなファイルの場合は、セグメントに分けて転送するのが最善です。
.net はデフォルトで 4M ファイルしか転送できないため、Wcf の両端の構成が設定されていても、.net の制限を超えることはできないため、大きなファイルを転送したい場合は、
を追加する必要がありますSystem.Web セクション
ここでの単位は KB であるため、100M のファイルを転送でき、WCF がビッグ データを送信する問題は完全に解決されます。もちろん、このような大きなファイルの場合は、セグメントに分けて転送するのが最善です。
ネットワークの混雑を引き起こす可能性があるため、大きすぎるデータを送信しないことをお勧めします。