Служба REST WCF возвращает неверный запрос HTTP 400 - PullRequest
2 голосов
/ 09 января 2012

Я пытался создать простой веб-сервис WCF RESTful, но, похоже, он работает только в режиме SOAP. Я размещаю свой сервис в местном IIS.

выглядит действительно стандартно:

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    Guid Login(string username, string password);
...

и

public class MyService : IMyService
{
    [WebGet(UriTemplate = "login?user={user}&password={password}", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
    public Guid Login(string username, string password)
    {
        return Guid.Empty;
    }

Я также включил поведение в файл конфигурации и использовал его в:

<endpoint address="" binding="webHttpBinding" contract="MyService" behaviorConfiguration="webHttp"/>

согласно всем известным мне примерам ...

Теперь дело в том, что при вызове имени входа из клиента-заглушки, который использует ServiceReference, в Fiddler он выглядит просто отлично, но это SOAPy. По какой-то причине я не могу вызвать мой сервис RESTy способом, даже / help, похоже, возвращает 400 неверных запросов. (Я вызываю http://localhost:8080/MyService.svc/help или / login и т. Д.)

Что мешает REST принять меры? Заранее спасибо:)

Редактировать: я нашел ответ.

Оказывается, нужно определить Маршруты ...

После добавления этого в Global.asax:

    protected void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.Add(new ServiceRoute("MyService",
           new WebServiceHostFactory(), typeof(MyService)));
    }

Все прошло хорошо.

Плюс я заработал, что ".svc" теперь не является частью URL.

Ответы [ 2 ]

1 голос
/ 13 декабря 2012

У меня была такая же проблема причина была в том, что мои сообщения в xml были сверху

<?xml version="1.0" encoding="utf-16"?>

Я удалил его, и оно просто сработало!

1 голос
/ 09 января 2012

Ваш код выглядит хорошо для меня.Можете ли вы попробовать несколько вещей

[OperationContract]
[WebGet(UriTemplate = "/Login/{username}/{password}", ResponseFormat = WebMessageFormat.Xml)]
Guid Login(string username, string password);

В то же время, пожалуйста, удалите атрибут WebGet из функции MyService.Login.

-OR-

Поместите этот блок в свойweb.config в system.web

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

Надеюсь, это поможет.

...