ADO.NET DataService: передача параметра в метод [WebInvoke] - PullRequest
4 голосов
/ 23 декабря 2008

Рассмотрим следующий пример:

public class SomeBusinessLayerService : DataService<MyEntityContainer>
{
 [WebInvoke]
 void DoSomething(string someParam)
 {
 }
}

Я не могу найти пример или любую помощь о том, как я могу передать параметр в функцию! Используя WebClient (или goofinfg с fiddler), я могу вызвать вызов функции, но независимо от того, что я пробую, параметр someParam всегда равен нулю Что еще хуже - если я изменю тип на int - все мои попытки заканчиваются следующей ошибкой:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <code></code>
  <message xml:lang="en-US">Bad Request - Error in query syntax.</message>
</error>

Может ли кто-нибудь помочь с рабочим примером содержимого POST, как я могу его назвать?

ПРИМЕЧАНИЕ. Это DataService, а не служба WCF. Я могу заставить его работать с сервисом WCF тем же методом без каких-либо проблем.

РЕДАКТИРОВАТЬ: Также мне нужен пример POST, а не параметр встраивания в URI, потому что URI имеет ограничение по размеру и требование для очистки строки.

Ответы [ 5 ]

5 голосов
/ 10 мая 2009

После нескольких часов работы над ответами «Неверный запрос - ошибка в синтаксисе запроса» я наконец заработал, передав параметры в URI.

Обратите особое внимание на кавычки вокруг строковых параметров:

НЕПРАВИЛЬНО: DoSomething? SomeParam = param ПРАВИЛЬНО: DoSomething? SomeParam = 'param'

1 голос
/ 13 января 2009

Может быть, вам следует попробовать заключить параметр param в URI в кавычки (DoSomething? SomeParam = 'param'). Я попробовал это, и он работает нормально, в противном случае я получаю ту же ошибку, что и вы.

0 голосов
/ 20 августа 2010

У меня была похожая проблема, я отправлял параметры формы в формате x-www-form-urlencoded (param1=value1&param2=value2...), используя метод POST, к метке, помеченной [WebInvoke], и мне было трудно понять, как получить параметры. Я наконец достиг этого следующим образом:

[WebInvoke]
void DoSomething(Stream requestStream)
{
    StreamReader reader = new StreamReader(stream);
    var requestContent = reader.ReadToEnd();
    var parameters = HttpUtility.ParseQueryString(requestContent);
    var param1 = parameters["param1"];
    var param2 = parameters["param2"]; //and so on...
}
0 голосов
/ 15 октября 2009

Чтобы завершить небольшой ответ antscode не только вы должны обратить пристальное внимание на окружение значений параметров кавычками ...

НО! Вы также должны поставить префикс Guid перед "guid". Вот так:

var y = ctx.Execute<bool>(new Uri("ReportExists?id=guid'" + Guid.NewGuid() + "'", UriKind.Relative));
0 голосов
/ 10 января 2009

Я никогда не получал ответ от команды Microsoft на этот вопрос, поэтому нашел следующее решение:

Создайте таблицу с именем FunctionRequest со строкой RequestID, Result и Paramerter
Для выполнения запроса я просто создаю объект.
Если мне нужно отправить сложный объект - я использую сериализацию DataContext, чтобы отправить его на сервер.
Все звонки теперь также записываются в базу данных, что отлично подходит для регистрации.

...