0

wcf odata サービスの maxReceivedMessageSize を増やそうとしています。SQL に値を挿入するために wcf サービスに値を送信する別の Web サービスがあります。投稿しています

{
A:1,
B:1,
C:3,
D:4,
}

これによりエラーが発生しました。リモート サーバーがエラーを返しました: (400) 不正な要求。以下の値を投稿すると、正常に挿入されました。

{
A:1
}

誰かがこのエラーを修正する方法を教えてください。以下のように Web 構成を変更しようとしている Web 上の例がありますが、私はサービス契約を結んでいないため、それらは私には合いません。

  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <!-- Create a custom binding for our service to enable sending large amount of data -->
        <binding name="MyBasicHttpBinding"
        maxBufferPoolSize="2147483647"
        maxReceivedMessageSize="2147483647"
        maxBufferSize="2147483647">
        <readerQuotas
          maxArrayLength="2147483647"
          maxBytesPerRead="2147483647"
          maxDepth="2147483647"
          maxNameTableCharCount="2147483647"
          maxStringContentLength="2147483647" />

        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <!-- Enable the serializer to serialize greater number of records -->
        <behavior name="WCFServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <!-- Bind the WCF service to our custom binding -->
      <service behaviorConfiguration="WCFServiceBehavior"
      name="WcfDataService">
        <endpoint address="" binding="basicHttpBinding"
        bindingConfiguration="MyBasicHttpBinding"
        contract=" `WHICH I DONT HAVE, OR I HAVE IT BUT I AM NOOB` "/>
      </service>
    </services>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
     multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

ADO.netエンティティモデルを使用する私のWCF

public class WcfDataService : DataService< DataModel.DataModelEntities >
{
    // This method is called only once to initialize service-wide policies.
    public static void InitializeService(DataServiceConfiguration config)
    {        
        // TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
        // Examples:
        config.SetEntitySetAccessRule("*", EntitySetRights.All); 
       // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
    }
}
4

1 に答える 1

1

コントラクトは、Microsoft.Data.Services の System.Data.Services.IRequestHandler です。

私の構成:

<system.serviceModel>
<services>
  <service name="ODataSampleRun.DemoDataService" behaviorConfiguration="Behavior">
    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
    <endpoint contract="System.Data.Services.IRequestHandler" binding="customBinding" bindingConfiguration="RawODataService" address="http://localhost:9090/DemoDataService" behaviorConfiguration="test" />
  </service>
</services>
<bindings>
  <webHttpBinding>
    <binding name="NoneWebBinding">
      <security mode="None" />
    </binding>
  </webHttpBinding>
    <customBinding>
        <binding name="RawODataService">
            <webMessageEncoding webContentTypeMapperType="ODataSampleRun.RawContentTypeMapper, ODataSampleRun, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
            <httpTransport manualAddressing="true" maxReceivedMessageSize="524288000" transferMode="Streamed" />
        </binding>
    </customBinding>
</bindings>
<behaviors>
  <endpointBehaviors>
    <behavior name="test">
      <webHttp faultExceptionEnabled="true" />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="Behavior">
      <serviceMetadata httpGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="true" httpHelpPageEnabled="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>

于 2012-09-12T08:06:25.820 に答える