神よ、あなたはただ WCF を愛しているのではありませんか。
考えられるすべてのスレッドを読みましたが、今は本当に行き詰まっています。
WCF 構成は次のとおりです。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BaseHttp"
maxBufferSize="4194304"
maxBufferPoolSize="4194304"
maxReceivedMessageSize="4194304" />
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="TaskServiceBehavior">
<serviceMetadata httpGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="TaskServiceBehavior" name="TaskService">
<endpoint
address="http://www.mysite.com/TableTaskService/TableTaskService.svc"
binding="basicHttpBinding" bindingConfiguration="BaseHttp"
contract="TableTaskService.ITableTaskService" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://www.mysite.com/TableTaskService/" />
</baseAddresses>
</host>
</service>
</services>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://www.mysite.com/" />
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
</system.serviceModel>
ここで、メッセージを送信すると、このデフォルトの例外がスローされます (svclog ファイルに表示されます)。
受信メッセージの最大メッセージ サイズ クォータ (65536) を超えました。クォータを増やすには、適切なバインド要素で MaxReceivedMessageSize プロパティを使用します。
今、私はそれが4MBであるべきだとはっきりと述べています。
私のクライアントコード:
TableTaskServiceClient client =
new TableTaskServiceClient(
new BasicHttpBinding { MaxBufferSize = 4194304,
MaxReceivedMessageSize = 4194304 },
new EndpointAddress(GetEndpointAddressString())
);
それでも、この 65536 サイズのエラーが表示されます。それはどこから来ているのですか?? ...
MaxReceivedMessageSize
また、クライアントがサーバーと同じ値に設定することは本当に重要ですか? クライアントではなくサーバーが長さを決定する責任があるのは論理的だと思います。
この警告もあります(つまり、オーバーライドされる要素に関する情報がない、または何かが欠落しているという意味で、それがどれほど役立つかに注意してください)、おそらくbasichttpbindingがまさにオーバーライドされるものですか?しかし、それはなぜでしょうか?とりあえず:
[TraceRecord] 重大度警告 TraceIdentifier http://msdn.microsoft.com/en-US/library/System.ServiceModel.OverridingDuplicateConfigurationKey.aspx 説明 構成システムは、別の構成スコープで重複キーを検出し、より新しい構成スコープでオーバーライドしています価値。AppDomain /LM/W3SVC/11/ROOT/TableTaskService-33-1296567 ソース System.ServiceModel.Configuration.ServiceBehaviorElementCollection/-851144413 ElementName 動作 OldElementLineNumber 0 NewElementLineNumber 0
UPDTE: サービスとクライアントの両方を再構成しました:
TableTaskServiceClient client = new TableTaskServiceClient(
new BasicHttpBinding {
MaxBufferSize = 4194304,
MaxReceivedMessageSize = 4194304,
MaxBufferPoolSize=4194304,
ReaderQuotas = new XmlDictionaryReaderQuotas
{
MaxArrayLength = 4194304,
MaxBytesPerRead = 4194304,
MaxDepth = 4194304,
MaxNameTableCharCount = 4194304,
MaxStringContentLength = 4194304
}
}, new EndpointAddress(GetEndpointAddressString()));
まだ同じエラー。
それが興味深い場合は、467000〜の長さのバイト[]配列を送信しています