【问题标题】:Call Web Service .asmx using $.get jquery使用 $.get jquery 调用 Web 服务 .asmx
【发布时间】:2010-01-23 01:58:04
【问题描述】:

我需要从 WfService.asmx 文件中调用一个简单的方法,使用 $.get()。

它适用于 POST 方法。方法如下:

 [WebMethod]
 public int Sum()
 {
  return 10 + 10;
 }

现在使用 Jquery 编码:

$.get('WfService.asmx/Soma',function(data){
alert(data.d);},"json");

我收到一条错误消息。 我做错了什么?

【问题讨论】:

  • 好吧,不管它可能是 SOAP 服务这一事实 - 是吗?你得到什么样的错误?
  • 是的,它是一个 SOAP 服务。错误类似于:“错误格式的查询字符串”。

标签: jquery get request


【解决方案1】:

为了与 SOAP Web 服务进行通信,您必须向其发送格式正确且符合服务定义的 WSDL 的 SOAP XML。除非您已明确将 ASP.NET Web 服务设置为返回 JSON 数据,否则您将无法在不先创建 SOAP 消息的情况下发出 $.get() 请求。

【讨论】:

  • 在我的 ASP.NET Web 服务中包含明确的 JSON 返回后。使用 JQUERY 的调用是否正确?
  • 我知道已经过了一分钟,但应该是。
【解决方案2】:

要让 ASP.NET SOAP Web 服务 (asmx) 与 jQuery 一起使用,您首先必须将 ScriptServiceAttribute(在 System.Web.Script.Services 中找到)添加到服务本身:

[ScriptService] // <--- here
public class MyWebService : WebService
{
    [WebMethod]
    public int Sum(int x, int y)
    {
        return x + y;
    }
}

如果项目不是作为 ASP.NET AJAX 项目创建的,您可能需要使用以下内容修改您的 web.config

<configuration>
  <system.web>
    <httpHandlers>
      <remove verb="*" path="*.asmx"/>
      <add verb="*" path="*.asmx" validate="false"
           type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </httpHandlers>
  </system.web>
</configuration>

(注意 - 使用适当的版本更新 System.Web.Extensions 程序集引用 - 这是针对 ASP.NET AJAX 1.0 的,它不是最新的。我没有 2.0 的信息,否则我会发布它。)

jQuery 代码可以这样写:

$.ajax({
    type: "POST",
    url: "/MyWebService.asmx/Sum",
    data: "{x: 2, y: 5}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
        $("#Result").html(msg);
    }
});

请注意,这将破坏任何依赖 XML 服务的客户端——为了回答这个问题,我假设 Web 服务的唯一消费者将是使用 jQuery 或至少是 JavaScript 的网站。如果您需要同时支持这两种情况,则需要创建两个 Web 服务。

【讨论】:

  • 你读过代码了吗?我说的是 GET 请求,而不是 POST。Post 是沙箱。这里的问题是:如何使用 $.get 调用 SOAP Web 服务,另外我不想通过任何参数。
  • @ozsenegal:是的,我阅读了代码。 ASMX Web 服务不支持GET 语义。您可以使用 WCF,但不能使用 SOAP。改用 Ajax POST 有什么问题? “沙盒”是什么意思?如果您不想传递任何参数,则只需将 data 留空即可。
  • 好的,我明白了。它确实有效,因为 SOAP Web 服务不支持 GET 请求,很好。谢谢。
【解决方案3】:

@Aaronaught 发布的示例有效,但只有一个注释=>您需要为您的网络服务方法添加属性:

[ScriptMethod(UseHttpGet = true,ResponseFormat=ResponseFormat.Json)]

示例:

 [WebMethod(EnableSession = true)]
[ScriptMethod(UseHttpGet = true,ResponseFormat=ResponseFormat.Json)]
public int Add(int num1,int num2) {


    return num1 + num2;
}

在您的 JQUERY ajax 调用中,您需要将类型从 POST 更改为 GET。我使用 .NET 4,我也不需要在 web.config 文件中进行此配置..

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    相关资源
    最近更新 更多