【问题标题】:Error when calling ASP.NET web services from Javascript从 Javascript 调用 ASP.NET Web 服务时出错
【发布时间】:2009-02-16 13:58:54
【问题描述】:

我正在尝试从 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);
}

scoregrid 在 js 端使用 Array() 命令声明为锯齿状二维数组。这是我对 Web 服务参数的唯一担心。

这里是服务参考:

<asp:ScriptManager id="scriptmng" runat="server">
<Services>
<asp:ServiceReference Path="~/SavingService.asmx" />
</Services>
</asp:ScriptManager>

无论是直接调用 Web 方法,还是像 SavingService.SaveToDB 那样调用它,还是使用完整的限定符,我都会遇到错误。我得到的错误说 SaveToDB 没有定义。 SavingService 未定义,QCApp4 未定义,取决于输入的限定名称的第一部分是什么。

我错过了什么吗?是不是我设置错了?

事实证明我已经将我的 WebMethod 设为静态,当然现在我在错误控制台中遇到错误:

错误:[异常...“'Sys.Net.WebServiceFailedException:Sys.Net.WebServiceFailedException:服务器方法'SaveToDB'失败并出现以下错误:System.NullReferenceException--对象引用未设置为目的。'调用方法时:[nsIDOMEventListener::handleEvent]" nsresult: "0x8057001c (NS_ERROR_XPC_JS_THREW_JS_OBJECT)" location: "" data: no]

【问题讨论】:

  • 您能否提供实际的调用,例如 URL,以及错误?是 500 还是 404 错误?
  • 这不是浏览器中可见的错误。我只是使用 Firefox 的错误控制台才发现它的。但结果并没有调用 web 方法。错误控制台中的错误说:错误:未定义 QCApp4 源文件:localhost:2507/Sheet.aspx 行:153
  • 实际调用是什么意思?我在与调用网页的项目相同的项目中调用 Web 方法。根据我读过的内容,我可以像调用 Javascript 函数一样进行调用。我的假设是否不正确?

标签: asp.net javascript web-services


【解决方案1】:

如果你在ServiceReference 元素上设置InlineScript 属性,它会写出与HTML 内联的JavaScript 方法,这样你就可以准确地看到你需要调用什么,或者你是否调用了错误的东西:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Services>
        <asp:ServiceReference Path="~/SavingService.asmx" InlineScript="true" />
    </Services>
</asp:ScriptManager>

【讨论】:

    【解决方案2】:

    我用这个搞砸了两件事。我回去找到了我之前看过的关于设置这些网络服务的视频。

    我意识到,我不小心将web方法设置为静态,还忘记添加回调方法参数。一旦我添加了一个 on complete 和一个 on 错误处理程序,它就可以正常工作,在错误控制台中没有错误。

    【讨论】:

      猜你喜欢
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 2012-07-13
      相关资源
      最近更新 更多