Javascript-调用ASP.NET WebService-服务器方法';methodName';失败

本文关键字:methodName 失败 方法 服务器 调用 ASP NET WebService- Javascript- | 更新日期: 2023-09-27 18:00:05

我已经尝试解决这个问题一段时间了,但还没有成功。我有一个基本的ASP.NET WebService,我正试图从javascript调用它。

using System;
using System.Web;
using System.Web.Services.Protocols;
using System.Web.Services;
using System.Web.Script.Services;
namespace RandomWebServices
{
/// <summary>
/// Summary description for WebServices1
/// </summary>
[WebService(Namespace = "http://localhost:2900/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class WebServices1 : WebService
{
    [WebMethod]
    public string PieTable(string table)
    {
        return table + " - resultant text";
    }
}
}

简单。。。对那么,为什么当我尝试从javascript调用它时,我会得到以下结果:

"错误:服务器方法'PieTable'失败。"

我对WebService的调用如下:

<script type="text/javascript">
function CallService() {
    RandomWebServices.WebServices1.set_defaultSucceededCallback(Callback);
    RandomWebServices.WebServices1.set_defaultFailedCallback(OnError);
    RandomWebServices.WebServices1.PieTable("Pie");
    return false;
}
function Callback(result) {
    alert("asd");
    var outDiv = document.getElementById("outputDiv");
    if (outDiv == null) {
        alert("outputDiv not found");
        return false;
    }
    else {
        alert("outputDiv found");
        outDiv.innerText = result;
    }
    return false;
}
function OnError(result) {
    alert("Error: " + result.get_message());
}
</script>

我从以下对象调用javascript:

<input value="Load" onclick="CallService(); return false;" type="button" />

我使用AJAX的ToolkitScriptManager对象来引用WebService:

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
<Services>
    <asp:ServiceReference Path="http://localhost:2900/WebServices1.asmx" />
</Services>
</asp:ToolkitScriptManager>

请协助。提前谢谢。Marco

Javascript-调用ASP.NET WebService-服务器方法';methodName';失败

如果不是使用.NET4,则需要执行配置条目以启用脚本服务。看见http://msdn.microsoft.com/en-us/library/bb398998(v=VS.90).aspx。所以请确保在web.config中有以下部分。

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

对于故障排除,您可以查看异常的堆栈跟踪,例如

function OnError(result) {
    alert("Error: " + result.get_message());
    alert("Stack Trace: " + result.get_stackTrace());
}

尝试在PieTable方法上应用[ScriptMethod]属性,这通常可以解决我使用JQuery调用Web方法时的问题。

http://msdn.microsoft.com/en-us/library/system.web.script.services.scriptmethodattribute.aspx

[WebMethod]
[ScriptMethod]
public string PieTable(string table)
{   
    return table + " - resultant text"; 
} 

我过去发现,在web服务类上声明的属性中,将()放在ScriptService之后,似乎解决了某些奇怪的问题。不知道为什么它会起作用,但在你的情况下也值得一试。

[WebService(Namespace = "http://localhost:2900/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService()]
public class WebServices1 : WebService
{
    [WebMethod]
    public string PieTable(string table)
    {
        return table + " - resultant text";
    }
}