[英]Error when calling ASP.NET web services from Javascript
我正在尝试从Javascript调用ASP.NET Web服务,并且即使我完全限定了该名称,它也无法识别Web方法,我正在试图找出问题所在。
这是我的web.config文件的一部分:
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
这是我的网络服务声明
[WebService(Namespace = "http://tempuri.org")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class SavingService : System.Web.Services.WebService
{
[WebMethod]
public static void SaveToDB(string runCode, string container,
string productType, string inspector, string[][] scoregrid, string notes)
这是JavaScript(QCApp4是我项目的名称空间):
function PrepToSave()
{
....
QCApp4.SavingService.SaveToDB(codev, containerv, prodtype, inspector, scoregrid, notes);
}
使用Array()命令,在JS端将scoregrid声明为锯齿状的二维数组。 那是我对Web服务参数的唯一担心。
这是服务参考:
<asp:ScriptManager id="scriptmng" runat="server">
<Services>
<asp:ServiceReference Path="~/SavingService.asmx" />
</Services>
</asp:ScriptManager>
无论是直接调用Web方法,还是像SavingService.SaveToDB之类的调用方法,或者在具有完整限定符的情况下,都遇到错误。 我得到的错误是未定义SaveToDB。 根据定义的合格名称的第一部分,未定义SavingService和QCApp4。
我想念什么吗? 我设置不正确吗?
事实证明,我已将WebMethod设为静态,当然现在我在以下错误控制台中遇到错误:
错误:[Exception ...“'Sys.Net.WebServiceFailedException:Sys.Net.WebServiceFailedException:服务器方法'SaveToDB'失败,出现以下错误:System.NullReferenceException-对象引用未设置为对象的实例。 调用方法时:[nsIDOMEventListener :: handleEvent]“ nsresult:” 0x8057001c(NS_ERROR_XPC_JS_THREW_JS_OBJECT)“位置:”“数据:否]
如果在ServiceReference
元素上设置InlineScript
属性,它将在HTML内联写出JavaScript方法,以便您可以准确地看到需要调用的内容或调用错误的内容:
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/SavingService.asmx" InlineScript="true" />
</Services>
</asp:ScriptManager>
我搞砸了两件事。 我回过头来,发现了以前观看过的有关设置这些Web服务的视频。
我意识到,我不小心将Web方法设为静态,并且还忘记添加回调方法参数。 一旦添加了on complete和on错误处理程序,它就可以正常工作,并且在错误控制台中没有错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.