Создание службы WCF JSON (не RESTful) - PullRequest
2 голосов
/ 25 апреля 2011

Я пытаюсь создать простой не-RESTful JSON-сервис, используя WCF и .NET 4. Мне бы хотелось, чтобы мой сервис мог анализировать сообщение-запрос JSON с определенным форматом, например, так:

{ "MethodNameRequest": { "MethodParam1Name": "ParamValue1", "MethodParam2Name": "ParamValue2" } }

Конечная точка для этой службы должна находиться в одном постоянном URI ("http://myserver/myservice/"), чтобы все методы могли быть вызваны с использованием запроса POST к ней.

Проблема заключается в том, что всякий раз, когда я пытаюсьобъявить два (или более) методов, используя один и тот же «UriTemplate» и тот же HTTP-глагол «POST» (используя WebInvokeAttribute), например:

[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, Method = "POST", UriTemplate = "")]
public string Method1()
{
   return "Method1";
}

[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, Method = "POST", UriTemplate = "")]
public string Method2()
{
   return "Method2";
}

Я получаю следующее исключение:

В контракте '' есть несколько операций с методом 'POST' и UriTemplate, эквивалентным ''. Каждая операция требует уникальной комбинации UriTemplate и Method для однозначной отправки сообщений. Используйте WebGetAttribute или WebInvokeAttribute, чтобы изменить UriTemplateи значения метода операции.

Любые идеи о том, как я могу настроить WCF, чтобы разрешить это?

Ответы [ 2 ]

1 голос
/ 25 апреля 2011

Я не вижу, как WCF мог бы выяснить, какой метод вызывать, если он каким-то образом позволял идентичный UriTemplate для разных методов.Кажется, вам нужно реализовать логику внутри метода для обработки обработки на основе содержимого.

0 голосов
/ 22 мая 2013

Попробуйте опустить свойство UriTemplate, вместо него используйте элемент <enableWebScript/> в web.config. Это позволит wcf автоматически обрабатывать запросы для вас.

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