2008-10-22 5 views
2

Я пытаюсь отправить сообщение в службу данных ADO.NET, но параметры, кажется, теряются на этом пути.Получить параметр из тела запроса в службе данных WCF/ADO.NET

я получил что-то вроде:

[WebInvoke(Method="POST")] 
public int MyMethod(int foo, string bar) {...} 

и я делаю AJAX-вызов с использованием prototype.js как:

var args = {foo: 4, bar: "'test'"}; 
new Ajax.Requst(baseurl + 'MyMethod', 
    method: 'POST', 
    parameters: args, 
    onSuccess: jadda, 
    onFailure: jidda 
} 

Если я заменяю "метод:" POST" с«методом: "GET» и "WebInvoke (Method =" POST ")" с "WebGet" все работает, но теперь (с помощью поста) все, что я получаю:

Bad Request - Ошибка в синтаксисе запроса.

со службы.

Единственное исправление (которое я не хочу использовать) - это отправить все параметры в URL, даже когда я выполняю запись. Любые идеи приветствуются.

ответ

2

Веб-службы WCF и ASMX имеют тенденцию быть немного выборочными относительно тела запроса, когда вы указываете args, запрос обычно кодируется как сообщение формы, то есть foo = 4 & bar = test, вместо этого вам нужно указать литерал javascript:

new Ajax.Request(baseurl + 'MyMethod', { 
     method: 'POST', 
     postBody: '{"foo":4, "bar":"test"}', 
     encoding: "UTF-8", 
     contentType: "application/json;", 
     onSuccess: function(result) { 
      alert(result.responseJSON.d); 
     }, 
     onFailure: function() { 
      alert("Error"); 
     } 
    }); 
0

Если вы хотите использовать POST, вам нужно указать параметры, которые должны быть обернуты в запрос в атрибуте WebInvoke, если только параметры не содержатся в объекте (например, договор сообщения). Это имеет смысл, так как нет возможности сериализовать параметры без использования json или xml.

развернутого, который не является XML действительно, как отсутствующий корневой элемент

<foo>1</foo> 
<bar>abc</bar> 

завернутые, действительный XML

<Request> 
    <foo>1</foo> 
    <bar>abc</bar> 
</Request> 

Этот пример также относится к JSON

0

Вы говорите, что я должен обернуть параметры i javascript как

var args = {Request: {foo: 3, bar: "'test'"}} 

или я что-то упускаю?

Я пытался добавить:

ResponseFormat=WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.Wrapped 

к WebInvoke-атрибута, но без результата. Я попытался установить «Content-Type» (в js POST ajax-call) на «application/x-www-form-urlencoding» и «application/json; charset = utf-8», но без результата.

Смежные вопросы