Мне интересно, что происходит за кулисами при создании веб-службы WCF.
В одном старом проекте у меня есть методы, которые я могу вызвать из JavaScript, которые выглядят следующим образом
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
IEnumerable<Result> SearchObjects(string x, int y, double z);
И это работает, когда я отправляю {"x": "что-то", "y": 1, "z": 1.5} из JavaScript.
Через пару месяцев после создания этого веб-сервиса я нашел веб-API WCF и попытался создать нечто подобное.
Разница заключалась в том, что я создал маршрут в моем Global.asax с помощью HttpServiceHostFactory ()
Теперь, когда я пытаюсь вызвать метод, я получаю исключение, подобное этому
Сведения об исключении: System.InvalidOperationException:
HttpOperationHandlerFactory не может определить входной параметр, который должен быть связан с содержимым сообщения запроса для операции службы «Invoke_LoginRequest». Если операция не ожидает содержимого в сообщении запроса, используйте метод HTTP GET с операцией. В противном случае убедитесь, что один из входных параметров имеет свойство IsContentParameter, установленное в значение «True», или является типом, который можно назначить одному из следующих параметров: HttpContent, ObjectContent 1, HttpRequestMessage or HttpRequestMessage
1.
И чтобы он заработал, мне нужно объявить метод следующим образом (VB.Net)
Public Function Invoke_LoginRequest(ByVal request As HttpRequestMessage(Of JsonValue)) As HttpResponseMessage(Of String)
Но тогда мне нужно проанализировать JsonValue вручную. Так как же работает старая версия? И есть ли способ, которым я мог бы вернуть это поведение?
С наилучшими пожеланиями
Jesper