2010-06-25 5 views
1

Я пытаюсь создать веб-сервис ASMX, который может выполнять HTTP-запрос GET. У меня есть следующий простой фрагмент кода, иллюстрирующий то, что я уже сделал.Веб-службы ASMX и HTTP GET

using System.Web.Script.Services; 
... 

[WebMethod] 
[ScriptMethod(UseHttpGet = true)] 
public string HelloWorld(HttpContext context) 
{ 
return context.Request.Params.Get("userId").ToString(); 
} 

В дополнение к этому, я также добавил следующие узлы в моем файле Web.config

<webServices> 
    <protocols> 
    <add name="HttpGet"/> 
    <add name="HttpPost"/> 
    </protocols> 
</webServices> 

Проблема, с которой я столкнулся в том, что я постоянно получаю страшный " System.Web.HttpContext cannot be serialized because it does not have a parameterless constructor ", когда я пытаюсь отладить этот веб-сервис. Я понятия не имею, в чем проблема, и я бы очень признателен за любую помощь, которая предлагается, чтобы избавить меня от этого затруднения. Я понимаю, что HTTP GET-запросы должны быть очень простыми, но я действительно не знаю, в чем причина моих разочарований.

ответ

4

Я думаю, что вы хотите

[WebMethod] 
[ScriptMethod(UseHttpGet = true)] 
public string HelloWorld(int userId) 
{ 
    return userId.ToString(); 
} 

Вы можете задать параметры в функции подписи, и вы можете получить доступ к HttpContext в Context (свойство на базовый класс WebService), если вам это нужно.

+0

В моем личном опыте [ScriptMethod (UseHttpGet = true)] вообще не влияет на метод службы. Это не заставляет метод использовать GET, и без него вы все равно можете вызвать метод с GET, если вы разрешили его в своем web.config – Sal