我一直试图解决这个问题一段时间但尚未成功。 我有一个基本的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>
请协助。 提前致谢。 马可
答案 0 :(得分:1)
如果您不使用.NET 4,则需要执行配置条目以启用脚本服务。见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());
}
答案 1 :(得分:1)
尝试在PieTable方法上应用[ScriptMethod]属性,这通常可以在使用JQuery调用webmethods时解决我的问题。
http://msdn.microsoft.com/en-us/library/system.web.script.services.scriptmethodattribute.aspx
[WebMethod]
[ScriptMethod]
public string PieTable(string table)
{
return table + " - resultant text";
}
答案 2 :(得分:0)
我在过去发现,在Web服务类上声明的属性中,在ScriptService之后的puts()已经看似解决了某些奇怪的问题。不知道它为什么会起作用,但也值得一试。
即
[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";
}
}