无法从 .net 中的 Ajax 调用 .asmx Web 服务

Posted

技术标签:

【中文标题】无法从 .net 中的 Ajax 调用 .asmx Web 服务【英文标题】:Not able to call .asmx web-service from Ajax in .net 【发布时间】:2019-09-18 09:37:51 【问题描述】:

我有一个使用 Windows 身份验证的现有 .net 解决方案。现在我在现有解决方案中添加了另一个 Web 服务项目,并在那里创建了一个 .asmx 服务。通过 ajax,我尝试如下调用该 Web 服务

Ajax 请求

$.ajax(
    type: "POST",
    url: "HelloService/HelloData.asmx/HelloWorld",
    data: "parameterList:" + JSON.stringify(model) + "",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    async: true,
    cache: false,
    success: function (jsondata) 
      alert(jsondata);
    , error: function (x, e) 
      alert("Error")          
    
);

这是我的 .asmx 服务

namespace HelloService

/// <summary>
/// Summary description for HelloData
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class HelloData : System.Web.Services.WebService


    [WebMethod]
    public string HelloWorld(string parameterList)
    
        return "Hello World";
    


在上面的代码中,我在“Application_error”方法的“Global.asax.cs”文件中收到No web service found at: /HelloService/HelloData.asmx. 错误。这里出了什么问题,需要做什么?

【问题讨论】:

请问为什么要在 2019 年创建新的 ASMX 服务?你为什么不改用Web API? 你的 javascript "data: "parameterList:" + JSON.stringify(model) + "" 错了应该是 data: 'parameterList: "' + JSON.stringify(model) + '"' this. and remove async: true, 即使没有响应,它也会执行下一条语句。 【参考方案1】:

代码中已经显示了,为了从Javascript调用ASMX Web服务,你需要添加System.Web.Script.Services.ScriptService属性。

您可以简单地取消注释该行,因此您的代码将如下所示:

/// <summary>
/// Summary description for HelloData
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class HelloData : System.Web.Services.WebService


    [WebMethod]
    public string HelloWorld(string parameterList)
    
        return "Hello World";
    

请注意,System.Web.Script.Services.ScriptService 属性现在已应用。

【讨论】:

以上是关于无法从 .net 中的 Ajax 调用 .asmx Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

使用 ajax() 和 jsonp 调用 asp.net 远程 Web 服务 .asmx 时出现意外令牌 <

[WebMethod]的使用,ajax调用[WebMethod]的使用,webservice(web服务) asmx的使用,ajax调用[WebMethod]进行json传输

从 ajax 调用 webservice asmx 返回 404 错误

从 Web 服务 (ASMX) 调用第三方 API

使用 JSON 从 AJAX 和 JQuery 调用简单的 Web 服务(.asmx 文件) - 解析错误

$Ajax ASP.NET Web 方法调用中的错误 [异步]