繁体   English   中英

从Javascript调用ASP.NET Web服务时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM