Какова правильная конфигурация службы REST WCF 4?

Извините, что пишу об этом, но это сводит меня с ума. Я использую маршруты в шаблоне 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>

person jdb1a1    schedule 08.07.2011    source источник


Ответы (2)


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

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

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

person edepperson    schedule 08.07.2011

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

person jdb1a1    schedule 11.07.2011
comment
Я столкнулся с той же проблемой. Я еще не нашел решения. Не могли бы вы быть более конкретными. Когда вы говорите, что это не сериализация объекта, который я пытался отправить в сообщении http. что именно вы сделали, чтобы исправить это? - person Arti; 19.03.2014