3

WCFサービスを呼び出して特定のURLを作成するWindowsアプリケーションがあります。

Windowsアプリケーションから呼び出されるWCF関数は、配列の形式で場所の詳細を受け入れます。

WCF関数に送信される配列サイズが小さい場合(たとえば10)、サービスが正しい結果を返す場合に問題が発生します。

ただし、配列のサイズが大きくなると(たとえば、> 200)、サービスは400Badリクエストを返します。

アレイのサイズまたはアレイの内容がこの問題の原因であるかどうかはわかりません。

最大バッファーサイズを受け入れるようにサーバー(サービス)側のweb.configを変更しようとしました。

<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IServiceContract" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" 

sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 

maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" 

textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" 

maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>


</basicHttpBinding>
</bindings>

<system.web>
    <compilation debug="true" targetFramework="4.0" />
            <httpRuntime executionTimeout="90" maxRequestLength="1048576" useFullyQualifiedRedirectUrl="false" 

minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
  </system.web>

それでも私は同じ問題に直面しています。

クライアント側(ここではWindowsアプリケーション)で、クライアントがサーバー側に大きなデータを送信できるように構成設定を設定するにはどうすればよいですか?

4

2 に答える 2

2

サーバー構成ファイルとクライアント構成ファイルでリーダー クォータを増やす必要があります。

<readerQuotas maxDepth="2147483647" 
maxStringContentLength="2147483647" 
maxArrayLength="2147483647" 
maxBytesPerRead="2147483647" 
maxNameTableCharCount="2147483647" />

maxReceivedMessageSize と bufferSize:

<httpTransport transferMode="Buffered"
maxReceivedMessageSize="2147483647"
maxBufferSize="2147483647"/>

サービス動作に dataContractSerializer を追加する必要がある場合もあります。

<serviceBehaviors>
<behavior name="Your SB">
<serviceMetadata httpGetEnabled="True"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
<serviceDebug 
includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
于 2013-02-07T12:04:04.497 に答える
0

クライアント側で変更を行う必要があります。との両方maxBufferSizeを変更しmaxReceivedMessageSizeます。昨日同様の問題に直面し、これらの値をより高い値にリセットすることで修正しました。

注:実際には、サービス(サーバー)に変更を加えていません。

于 2013-02-07T09:42:47.320 に答える