Служба WCF возвращает ошибку 400 при использовании WebGet - PullRequest
2 голосов
/ 04 января 2011

Я мало что знаю о WCF.Но у меня есть очень простой сервис, который я пытаюсь выполнить.Мой сервисный код выглядит так:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceBehavior(IncludeExceptionDetailInFaults = false)]
[ServiceContract]
public class MyService
{
    [OperationContract]
    [WebGet(UriTemplate = "/IsValidRequest")]
    public bool IsValidRequest()
    {
        return true;
    }
}

Как я уже сказал, очень простой сервис.Когда я ввожу "http://localhost:[port]/MyService.svc" в свой браузер, я вижу страницу описания службы. Однако" IsValidRequest "не отображается в списке, как я думал (это может быть только с .asmx). В любом случае, когда я вхожу" http://localhost:[port]/MyService.svc/IsValidRequest" в мой браузер ничего не возвращается.В Fiddler я вижу, что получаю ошибку HTTP 400.Тем не менее, ничто не может подсказать мне, в чем может быть проблема.

Может ли кто-нибудь помочь мне и указать мне правильное направление?Спасибо!

Ответы [ 2 ]

4 голосов
/ 13 июля 2011

Используйте следующую конфигурацию (измените пространства имен в соответствии с вашим кодом)

<services>
  <service name="WcfService1.MyService" behaviorConfiguration="GetBehavior">
    <endpoint address="" binding="webHttpBinding" behaviorConfiguration="WebBehavior"  contract="WcfService1.MyService">

    </endpoint>

  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="GetBehavior">

      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="WebBehavior">
      <webHttp />          
    </behavior>
  </endpointBehaviors>

</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" aspNetCompatibilityEnabled="true"/>

Ваш файл .svc должен выглядеть следующим образом:

<%@ ServiceHost Language="C#" Debug="true" Service="WcfService1.MyService" CodeBehind="MyService.svc.cs" %>

enter image description here

1 голос
/ 15 июля 2011

Просмотр WSDL для сообщения не имеет значения, потому что, как вы сказали в ответе на комментарий, вы хотите, чтобы это была служба на основе REST, а WSDL - это конструкция SOAP.Исходя из этого, вы должны удалить поведение <serviceMetadata>, если оно у вас есть, так как это касается метаданных SOAP.

Чтобы диагностировать подобные проблемы, вы должны включить трассировку в WCF (у меня короткая заставка здесь , которая показывает вам, как это сделать).Это должно подчеркнуть, в чем проблема при обработке сообщения

Чтобы подключить систему REST без добавления раздела в конфигурации для вашей службы, добавьте следующее в файл конфигурации в разделе system.serviceModel

<protocolMapping>
  <add scheme="http" binding="webHttpBinding"/>
</protocolMapping>
<behaviors>
  <endpointBehaviors>
    <behavior>
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...