1

Code First (VS 2012、.NET 4.0、WCF 5) で WCF を使用します。大きなオブジェクトを転送しない限り、すべて正常に動作します。他の多くのオブジェクトのリストが含まれています。すべてのオブジェクトには小さなコンテンツしかありません。このリストが 127 個のオブジェクトよりも長い場合、例外が発生します。

サーバーは意味のある応答を返しませんでした。これは、コントラクトの不一致、時期尚早のセッション シャットダウン、または内部サーバー エラーが原因である可能性があります。

データベースの列数を減らすことでそれがわかりました(試行錯誤)。

クライアントで次の構成を使用します。

  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBinding_****_Service" closeTimeout="00:00:10"
          openTimeout="00:00:10" receiveTimeout="00:05:00" sendTimeout="00:05:00"
          maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
        </binding>
      </netTcpBinding>
    </bindings>
    <client>
      <endpoint address="net.tcp://localhost:8000/****" binding="netTcpBinding"
        bindingConfiguration="****" contract="****"
        name="NetTcpBinding_****Service">
        <identity>
          <userPrincipalName value="****" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>

サーバー構成は次のようになります。

  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="NetTcpBinding_****_Service" closeTimeout="00:00:10"
          openTimeout="00:00:10" receiveTimeout="00:05:00" sendTimeout="00:05:00"
          transferMode="Buffered" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
          maxConnections="0" maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="100000" maxStringContentLength="100000"
            maxArrayLength="100000" maxBytesPerRead="100000" maxNameTableCharCount="100000" />
          <reliableSession enabled="false" />
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service name="****">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_****_Service"
          contract="****" />
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8000/****" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="false"/>
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

一部名前を伏せてますがご容赦ください。プロジェクトに関するこれらの名前から推測できることは避ける必要があります。:D

4

1 に答える 1

0

最初に、このプロパティをサーバー側で設定します(開発用のみ)

<serviceDebug includeExceptionDetailInFaults="true" />

これは、デバッグ目的でクライアントに返される SOAP エラーの詳細にマネージ例外情報を含めるかどうかを指定します。

リクエストの処理中に何か問題があることは確かですが、デバッグ情報はありません。そのため、このプロパティを設定する必要があります。WCF トレースを有効にすることもできますが、少し難しくなります。

WCF には多くのクォータがあります: クォータは、クォータ値を超えると追加のリソースを使用できないようにするハード リミットです。

大きなデータを送信する場合は、特に 2 つのクォータに注意する必要があります: maxReceivedMessageSize と MaxItemsInObjectGraph です。

于 2013-06-21T12:49:06.387 に答える