ホームページ  >  記事  >  バックエンド開発  >  ビッグデータを送信するために WCF を実装するための正しい設定

ビッグデータを送信するために WCF を実装するための正しい設定

巴扎黑
巴扎黑オリジナル
2016-12-20 09:20:191852ブラウズ

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"
"basicHttpBinding" =
"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 がビッグ データを送信する問題は完全に解決されます。もちろん、このような大きなファイルの場合は、セグメントに分けて転送するのが最善です。

ネットワークの混雑を引き起こす可能性があるため、大きすぎるデータを送信しないことをお勧めします。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:.net 名前空間次の記事:.net 名前空間