Публикация из JQuery в сервис WCF - PullRequest
2 голосов
/ 20 марта 2010

У меня есть служба WCF (называемая «myservice.svc»), которая принимает сообщение от пользователя и сохраняет его в базе данных. Он возвращает ответ пользователю в виде числа. Эта операция выглядит следующим образом:

[OperationContract]
[WebGet]
public string SubmitMessage(string message)
{
  try
  {
    // SAVE TO DATABASE
    return "1";
  }
  catch (Exception ex)
  {
    return "0";
  }
}

Я хочу вызвать эту операцию из некоторого JQuery. Я использую подход, показанный здесь:

$.getJSON(
  "/services/myService.svc",
  {message:"some text"},
  function (data) {
    alert("success");                
  }
);

Как ни странно, предупреждение об успехе никогда не отображается. Кроме того, я установил точку останова в моей службе WCF, и она никогда не отключается. Что я делаю не так?

Спасибо

Ответы [ 2 ]

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

Это WebGet не должно быть там, и вы не должны использовать функцию jQuery getJSON.Этот метод изменяет базу данных;это POST метод, а не GET.

См. на этой странице пример создания метода POST.В основном это включает добавление этих заголовков к методу:

[OperationContract]          
[WebInvoke(Method = "POST",
           BodyStyle = WebMessageBodyStyle.Wrapped,
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json)]

Вам также необходимо убедиться, что вы правильно делаете вызов из jQuery, который включает в себя установку contentType и других полей;способ, которым вы делаете вызов, на самом деле недопустим, вы просто передаете сырой текст методу, а не действительную строку запроса или действительный JSON.

Кроме того, вы используете неправильный URL;Вы не хотите отправлять сообщения в конечную точку, вам нужно отправить в определенный метод, вы должны добавить это к URL.Опять же, связанная страница должна помочь объяснить все это.

Вот пример правильного сообщения jQuery Ajax:

$.ajax({ 
    url: "/services/myservice.svc/SubmitMessage",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    data: "{ \"message\": \"test\" }",
    dataType: "json",
    success: function(data) {
        // do something
    }
});
1 голос
/ 20 марта 2010

В дополнение к ответу Аарона, в любом случае, ваш URL неверен.

Если это служба WCF, то вызываемый вами URL-адрес не является "/services/myService.svc"; вам нужно вызвать фактический метод URL. Поскольку в приведенном выше примере не указано имя класса вашей службы, я не могу сказать, но обычно это

/ услуги / ServiceClass / MethodName

Используйте браузер для просмотра WSDL службы верхнего уровня и поиска фактических путей URL для ваших методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...