2010-08-24 2 views
4

я установки этот пример веб-службы, чтобы исследовать источник моей ошибки:C# .NET Webservices с помощью HttpGet Возвращает System.IndexOutOfRangeException

namespace userControlPanel.webservice 
{ 
    /// <summary> 
    /// Summary description for WebService1 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [System.ComponentModel.ToolboxItem(false)] 
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService] 
    public class WebService1 : System.Web.Services.WebService 
    { 
     [WebMethod] 
     [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
     public OutputData1 AjaxGetMore(InputData1 input) 
     { 
      return new OutputData1() 
      { 
       id = input.id, 
       message = "it's work!", 
       myInt = input.myInt + 1 
      }; 
     } 

    } 
    public class OutputData1 
    { 
     public string id { get; set; } 
     public string message { get; set; } 
     public int myInt { get; set; } 
    } 
    public class InputData1 
    { 
     public string id { get; set; } 
     public int myInt { get; set; } 
    } 

} 

Он основан на примере здесь

Так что я имею попытался принести результат здесь:

http://localhost:57109/webservice/WebService1.asmx/AjaxGet?id=li1234 

И я получаю результат,

System.IndexOutOfRangeException: Index was outside the bounds of the array 
    at System.Web.Services.Protocols.HttpServerType..ctor(Type type) 
    at System.Web.Services.Protocols.HttpServerProtocol.Initialize() 
    at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) 

Итак, я предполагаю, что это web.config? Поэтому я реализую предложил настроить (PS, я также создал веб-службы HTTP-POST и он работает просто отлично)

От web.config:

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

    <httpHandlers> 
     <add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory" validate="false"/> 
    </httpHandlers> 
    </system.web> 

ответ

2

Оказывается, этот вопрос был результатом некоторые плохой код перефакторинга и класс/имя-пространство вопросов с моей стороны.

Кроме того, хотелось бы отметить, что избегание форму HttpGet при использовании JQuery WebServices это хорошая идея, повторно информация, которую я читал here