TransferModeを "Streaming"に設定してwcf basicHttpBindingを有効にしました。
問題は、クライアント側のストリームから読み取り操作を行うたびに、正確に1536バイト(イーサネットフレーム)を読み取ることになります。
一度に大きなパケットのデータを送信するためにwcfサービスを取得するにはどうすればよいですか?Wcf非常に小さいパケットサイズ
EDIT
だから、明らかにデフォルトBytesPerReadは、しかし、私は、クライアントとサーバーの両方でその値を変更した、4096です。ここでの設定ファイルまた
があり、私は同じ問題
WCF maxBytesPerRead limit to 4096
サーバー SERVERで扱っ未回答の投稿を見つけた
(私は2つのエンドポイントを持っていることに注意してください、1は、コンテンツをダウンロードするためであります、私は)私の質問にbasicHttpBindingエンドポイントを参照していますbasicHttpBindingにし、一つの通信がws2007HttpBindingを使用するためである
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="MyBasicHttpBinding" allowCookies="true" maxBufferSize="955366"
maxBufferPoolSize="964285" maxReceivedMessageSize="955556" messageEncoding="Mtom"
transferMode="Streamed">
<readerQuotas maxDepth="60" maxStringContentLength="955556" maxArrayLength="955556"
maxBytesPerRead="955556" maxNameTableCharCount="955556" />
</binding>
</basicHttpBinding>
<ws2007HttpBinding>
<binding name="MyBinding" allowCookies="false">
<security mode="None" />
</binding>
</ws2007HttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ContentManagementServiceBehavior"
name="App_Code.Services.ContentManagement.ContentManagementService">
<clear />
<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"
listenUriMode="Explicit" />
<endpoint binding="ws2007HttpBinding" bindingConfiguration="MyBinding"
name="ws2007Endpoint" contract="App_Code.Services.ContentManagement.IContentManagementService"
listenUriMode="Explicit" />
<endpoint address="/download" binding="basicHttpBinding" bindingConfiguration="MyBasicHttpBinding"
name="basicHttpBinding" contract="App_Code.Services.ContentManagement.IContentManagementDownlodService" />
<host>
<baseAddresses>
<add baseAddress="/Services/ContentManagement/ContentManagementService.svc" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ContentManagementServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
CLIENT
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicHttpBinding" closeTimeout="00:10:00" openTimeout="00:10:00"
receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="92429000" maxReceivedMessageSize="65536000" messageEncoding="Mtom"
textEncoding="utf-8" transferMode="Streamed" useDefaultWebProxy="true">
<readerQuotas maxDepth="90" maxStringContentLength="65536000" maxArrayLength="65536000"
maxBytesPerRead="655360" maxNameTableCharCount="65536000" />
<security mode="None" />
</binding>
</basicHttpBinding>
<wsHttpBinding>
<binding name="ws2007Endpoint" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false"
transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288646" maxReceivedMessageSize="65536646"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="819264564"
maxArrayLength="163846764" maxBytesPerRead="40964543" maxNameTableCharCount="16384564" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
<transport realm="" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="<absolute address>"
binding="wsHttpBinding" bindingConfiguration="ws2007Endpoint"
contract="ContentManagementServiceReference.IContentManagementService"
name="ws2007Endpoint" />
<endpoint address="<absolute address>"
binding="basicHttpBinding" bindingConfiguration="basicHttpBinding"
contract="ContentManagementServiceReference.IContentManagementDownlodService"
name="basicHttpBinding" />
</client>
</system.serviceModel>
大きなパケットはおそらくちょうど断片化されますが。 1536バイトごとにいくつかのパッケージに分割されます。あなたのネットワークがより大きなパッケージを扱うことができるでしょうか? – sisve
WebRequestsを使用して、より高速で大きなチャンクでファイルをダウンロードし、アップロードしたプロジェクトでもそうだと思います。私は約1.2MB /秒の速度で約300〜500kb/sのファイルを、私のサービスがホストされているサーバーから直接ダウンロードすることができます。このような小さなデータ(4096 bytesPerRead)のダウンロード速度は、接続速度が極端に遅い15-30 kb/sです。 – dortzur