wcf でストリーミング モードを使用すると、非常に奇妙な問題が発生します。これが私のサーバーとクライアントの構成です。
サーバー構成:
<system.serviceModel>
<services>
<service name="eTreasury.ServiceModel.ServiceImplimentation.BackOfficeService"
behaviorConfiguration="ServiceBehavior">
<endpoint name="streamed"
address="/streamed"
binding="customBinding"
bindingConfiguration="BinaryHttpBindingStreamedConfig"
contract="eTreasury.ServiceModel.ServiceContracts.IBackOfficeService"
behaviorConfiguration="EndpointBehavior"/>
</service>
</services>
<bindings>
<customBinding>
<binding name="BinaryHttpBindingStreamedConfig"
openTimeout="00:02:00"
receiveTimeout="00:02:00"
sendTimeout="00:02:00"
closeTimeout="00:02:00">
<binaryMessageEncoding maxReadPoolSize="2147483647"
maxWritePoolSize="2147483647"
maxSessionSize="2147483647">
<readerQuotas maxArrayLength="2147483647"
maxDepth="1024"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647"
maxStringContentLength="2147483647"/>
</binaryMessageEncoding>
<httpTransport maxBufferPoolSize="2147483647"
maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647"
transferMode="StreamedResponse"/>
</binding>
</customBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="ClientBehavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
クライアント構成:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="BinaryHttpBindingStreamedConfig" closeTimeout="00:05:00"
openTimeout="00:05:00" receiveTimeout="00:05:00" sendTimeout="00:05:00">
<binaryMessageEncoding />
<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"
transferMode="StreamedResponse" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="http://localhost:2408/BackOfficeService.svc/streamed"
binding="customBinding" bindingConfiguration="BinaryHttpBindingStreamedConfig" contract="BackOfficeServiceClient.IBackOfficeService"
name="BackOfficeStreamedService" />
</client>
</system.serviceModel>
Google Chrome、Firefox、Opera では 200Mb のデータですべて問題ありません。Internet Explorer でのみ問題が発生します。
メッセージを逆シリアル化しようとしているときにフォーマッタが例外をスローしました: パラメータhttp://tempuri.org/:LoadOrdersResultを逆シリアル化しようとしているときにエラーが発生しました。InnerException メッセージは、「タイプ System.Collections.ObjectModel.ObservableCollection`1[[eTreasury.DataModel.BusinessObjects.OrderListItemForBack、eTreasury.SilverlightDataModel、Version=1.0.0.19815、Culture=neutral、PublicKeyToken=null のオブジェクトのデシリアライズ中にエラーが発生しました。 ]]。予期しないファイルの末尾。次の要素は閉じられていません: CreatedDate、OrderListItemForBack、LoadOrdersResult、LoadOrdersResponse、Body、Envelope。詳細については、InnerException を参照してください。