Какова правильная конфигурация для службы REST WCF 4? - PullRequest
3 голосов
/ 08 июля 2011

Извините, что написал об этом, но это сводит меня с ума. Я использую маршруты в шаблоне REST WCF4 в VS2010. Я установил для свойства maxreceivedmessagesize какое-то гигантское число, и оно все равно дает мне код состояния HTTP 400, когда я пытаюсь отправить xml в службу. Я включил трассировку, и в сообщении говорится, что он по-прежнему имеет размер сообщения по умолчанию. Это заставляет меня думать, что проблема в том, как я настроил свой web.config. Может ли кто-нибудь быстро взглянуть на это и дать мне знать, что они думают?

Я был вокруг и вокруг с этим, и дополнительный набор глаз был бы очень полезен для меня. Заранее спасибо!

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>
  </system.webServer>

  <system.serviceModel>

    <bindings>
      <webHttpBinding>
        <binding name="" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" transferMode="Streamed"  openTimeout="00:25:00" closeTimeout="00:25:00" sendTimeout="00:25:00" receiveTimeout="00:25:00" maxBufferSize="2147483647">
          <readerQuotas maxDepth="64"
                 maxStringContentLength="2147483647"
                 maxArrayLength="2147483647"
                 maxBytesPerRead="2147483647"
                 maxNameTableCharCount="2147483647"/>
        </binding>
      </webHttpBinding>
    </bindings>

    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <dataContractSerializer maxItemsInObjectGraph="9000000"/>

          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>


    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <standardEndpoints>
      <webHttpEndpoint>
        <!-- 
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
            via the attributes on the <standardEndpoint> element below
        -->
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" maxReceivedMessageSize="2147483647" transferMode="Streamed" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"/>
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel"
              switchValue="Information, ActivityTracing"
              propagateActivity="true">
        <listeners>
          <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData= "c:\logs\Traces.svclog" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

</configuration>

Ответы [ 2 ]

0 голосов
/ 11 июля 2011

ОК, я понял это;проблема была на самом деле на клиенте.Это не был сериализованный объект, который я пытался отправить в пост http.Когда я проверил это по службе на тестовом сервере, я исправил XML для сообщения, и теперь он работает правильно.Спасибо!

0 голосов
/ 08 июля 2011

Как выглядит ваш атрибут OperationContract? Вы установили RequestFormat и ResponseFormat для WebMessageFormat.Xml? Кроме того, ваш BodyStyle должен быть WebMessageBodyStyle.WrappedRequest

Поскольку запись отсутствует, я предполагаю, что вы запускаете ее под IIS. если это так, убедитесь, что у вас правильно настроен файл .svc.

Кроме того, вы можете проверить ваш global.asax, чтобы убедиться, что URL действительно указывает на службу wcf. Я просто догадываюсь, но единственное, что я уверен, это не свойство размера сообщения

...