Asp.Net Ajax WebService和内部错误500

时间:2010-03-24 17:21:42

标签: c# asp.net asp.net-ajax web-services

我可以使用以下URL直接将webservie调用到浏览器,它将返回我想要的所有内容:

http://localhost:64438/MySearchAutoComplete.asmx/GetCompletionList

当我将它添加到autocompleteexetender中时,将其添加到Default.aspx页面中:

<cc1:AutoCompleteExtender ID="AutoCompleteExtender1" 
                  TargetControlID="TextBox1" 
                  runat="server" 
                  ServiceMethod="GetCompletionList" 
                  ServicePath="http://localhost:64438/MySearchAutoComplete.asmx" 
                  CompletionSetCount="12"
                  MinimumPrefixLength="1" />

页面加载,我有一个文本框但每次在文本框中添加击键时都会出现错误500。我在FireFox FireBug中看到了错误。

http://localhost:62702/   --->This is the webpage that load fine 

alt text http://clip2net.com/clip/m12122/1269451120-clip-2kb.png - &gt;这是错误

有什么想法吗?我注意到我需要附加调试web服务的过程,我也可能做错了吗?

编辑(事件查看器)

如果我去我机器的事件查看器。我可以看到:

Exception information: 
    Exception type: InvalidOperationException 
    Exception message: Request format is unrecognized for URL unexpectedly ending in '/GetCompletionList'. 


    Thread information: 
    Thread ID: 8 
    Thread account name: MTL\daok 
    Is impersonating: False 
    Stack trace:    at     System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response)
   at System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath)
   at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)
   at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

我还必须首先启动webservice项目,而不是停止它并启动webproject以便能够同时启动它们。网络服务仍然有效(我可以直接发起http://localhost:64438/MySearchAutoComplete.asmx?op=GetCompletionList),但在网页上我仍然有错误500.

编辑2(Web.config)

添加到web服务项目web.config:

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

没有解决问题。

编辑3(直接呼叫)

在Page_Load()中调用WebService中的相同方法非常有效:

     string[] stuffs;
     stuffs = proxy.GetCompletionList("1", 10);
     MyList.DataSource = stuffs;
     MyList.DataBind();

但它不适用于AutoCompleteExtender ......

2 个答案:

答案 0 :(得分:6)

在Web服务器(即本地计算机)上的事件日志中,它应该提供更详细的错误消息。

将此添加到您的web.config我想

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

答案 1 :(得分:0)

只需确保取消注释Web服务类页面顶部[System.Web.Script.Services.ScriptService]下方的WebServiceBinding

那应该解决了。 如果仍然存在,请检查SitePath的URL,以确保它正确地植根于Web服务的位置,方法是在URL之前添加“〜”,如下所示:

SitePath="~/Webservice.asmx"