8

ホストのweb.configでdataContractSerializermaxItemsInObjectGraphを指定する際に問題が発生します。

 <behaviors>
  <serviceBehaviors>
    <behavior name="beSetting">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="True" />
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
 <services>
  <service name="MyNamespace.MyService"
           behaviorConfiguration="beSetting" >
    <endpoint address="http://localhost/myservice/"
              binding="webHttpBinding"
              bindingConfiguration="webHttpBinding1"
              contract="MyNamespace.IMyService"
              bindingNamespace="MyNamespace">
    </endpoint>
  </service>
</services>

上記は私のデータプルには影響しません。大量のデータが原因でサーバーがタイムアウトします。

ただし、コードで最大制限を指定することはできますが、それは機能します

  [ServiceBehavior(MaxItemsInObjectGraph=2147483646, IncludeExceptionDetailInFaults = true)]
  public abstract class MyService : MyService 
  {
   blah...
 }

web.config設定でこれを機能させることができない理由を誰かが知っていますか?将来の更新が簡単になるように、web.configを保持したいと思います。

4

1 に答える 1

12

動作セクションで、次のように、dataContractSerializer を使用してエンドポイントの動作を追加します。

<endpointBehaviors>
  <behavior name="LargeQuotaBehavior">
   <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
  </behavior>
</endpointBehaviors>

次に、この動作を使用するようにエンドポイントを次のように変更します。

<endpoint address="http://localhost/myservice/"
          binding="webHttpBinding"
          bindingConfiguration="webHttpBinding1"
          contract="MyNamespace.IMyService"
          bindingNamespace="MyNamespace"
          behaviorConfiguration="LargeQuotaBehavior">

これで問題が解決するはずです。

于 2012-04-10T15:20:45.677 に答える