1

我正在尝试通过 JavaScript 和 jQuery 从 HTML 页面调用 asmx 服务。这是我的服务 HelloWorldTest.asmx 的代码:

[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 HelloWorldTest : System.Web.Services.WebService
{

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
    public string HelloWorld5()
    {
        string connetionString = null;
        SqlConnection connection;
        SqlDataAdapter adapter = new SqlDataAdapter();
        string sql = null;
        connetionString = System.Configuration.ConfigurationManager.ConnectionStrings["pollConString"].ToString();
        Random _rg = new Random();
        connection = new SqlConnection(connetionString);
        sql = "insert into Country (OID,country_name) values( 'Servicecalled-" + Convert.ToString(_rg.Next(0, 99999999)).PadLeft(8, '0') + "','"+System.DateTime.Now.ToString() +"')";

        connection.Open();
        adapter.InsertCommand = new SqlCommand(sql, connection);
        adapter.InsertCommand.ExecuteNonQuery();  
        return "Helloworld";
    }
}

我已经在本地服务器上发布了该服务,该服务器在 192.168.0.124 和端口 80 中运行。

现在这是我用于客户端调用的 HTML 页面代码:

$.ajax({
    type: 'GET',
    url: http://192.168.0.124:80/pollservice/Services/HelloWorldTest.asmx/HelloWorld5',
    processData: true,
    data: {},               
    dataType: "json; charset=utf-8",
    responseType: "",
    success: function (data, textStatus, jqXHR) {
        processData(data, textStatus, jqXHR);
    }
});

function processData(data, textStatus, jqXHR) {                  
    alert(' data d = ' + data.d); 
}

现在的问题:

当我遇到本地主机时,我会从服务中获得回报。这是一个简单的字符串。但是,当我将它发布到 LAN 中的服务器并从客户端计算机调用时,我得到空输出。

但是,有趣的是,日志被写入服务器。所以 Helloworld5() 方法是通过 $.ajax(....) call 从 JavaScript 方法调用的。但是在发布服务器的情况下,JSON 返回数据是空的。

为什么会这样?我正在以 Asp.Net 集成模式运行已发布的网站。

4

2 回答 2

0

您将返回类型声明为 JSON,但实际上返回的是裸字符串。您可能希望在返回之前构建 JSON 数据,例如:

// ...

string responseData = "{ d : \"";
responseData += "Hello World!";
responseData += "\" }";

return responseData;
于 2012-04-05T11:47:13.640 回答
0

如果 html 和 asmx 服务在不同的服务器上运行,这可能是因为同源策略。要启用跨源 ajax 请求,您必须使用JSONP或 CORS。

为确保这是一个跨源问题,您可以使用 chrome 开发人员工具,如果出现跨源问题,您将在其中收到消息“Access-Control-Allow-Origin 不允许源”。

我有一个类似的问题,我最终使用了 JSONP。

于 2013-10-17T11:27:37.370 回答