405 метод не допускается ошибка в WCF - PullRequest
4 голосов
/ 13 марта 2010

Может кто-нибудь заметить проблему с этой реализацией? Я могу открыть его в браузере, и он работает, но сбой вызова со стороны клиента (с использованием jquery и asp.net ajax)

Договор на обслуживание

[OperationContract(Name = "GetTestString")]
[WebInvoke(Method = "GET",
           ResponseFormat = WebMessageFormat.Json
   )]
string GetTestString();

В Web.config среди других привязок есть привязка webHttp

<endpoint address="ajax" binding="webHttpBinding" contract="TestService" behaviorConfiguration="AjaxBehavior" />

Поведение конечной точки

  <endpointBehaviors>
    <behavior name="AjaxBehavior">
      <enableWebScript/>
    </behavior>
  </endpointBehaviors>
</behaviors>

Svc file

<%@ ServiceHost Service="TestService" %>

Клиент

var serviceUrl = "http://127.0.0.1/Test.svc/ajax/";
var proxy = new ServiceProxy(serviceUrl);

Затем я использую подход в http://www.west -wind.com / weblog / posts / 324917.aspx позвонить в службу

Ответы [ 2 ]

6 голосов
/ 13 марта 2010

В примере по вашей ссылке используется HOSTP POST, а не HETP GET. Это «метод [который] не разрешен» - вам нужно изменить код, чтобы вместо этого выполнить GET.

Ссылка, которую вы публикуете в качестве исходного кода для клиента, содержит этот блок:

 $.ajax( { 
                url: url,
                data: json,
                type: "POST",
                processData: false,
                contentType: "application/json",
                timeout: 10000,
                dataType: "text",  // not "json" we'll parse

Обратите внимание на type: "POST" там - ваш должен быть "GET". Я предполагаю, что вы взяли свой JQuery по ссылке, которую вы разместили, потому что статус 405 говорит о том, что ваш код вызова неправильный, а не служба.

1 голос
/ 22 июня 2012

для метода не допускается ошибка, все, что вам нужно проверить, это убедиться, что ваш веб-вызов / запрос http совпадает с тем, который указан в [WebInvoke ...] в службе

  $.ajax({
                type: "POST",.....});

ДОЛЖЕН БЫТЬ ИДЕНТИЧНЫМ ДЛЯ ТОГО, ЧТО УКАЗАНО В СЕРВИСНОМ ИНТЕРФЕЙСЕ (ПОД "[Контракт на эксплуатацию]")

 [WebInvoke(Method = "POST",BodyStyle = WebMessageBodyStyle.Wrapped,ResponseFormat = WebMessageFormat.Json)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...