我写了一个简单的ASP.NET WebService预编译它并将其托管在虚拟目录中。
网络服务代码:
namespace Test.Services
{
/// <summary>
/// Summary description for AgentService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class TestService : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
public string SayHello(string name)
{
return "Hello, " + name;
}
}
}
访问此网络服务的Javascript代码:
function SayHello() {
var serviceURL = "http://172.42.100.47/TestService/TestService.asmx/SayHello";
var requestData = "{name:'" + $('#txtName').val() + "'}";
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
url: serviceURL,
data: requestData,
dataType: 'json',
success: function(result){
alert(result.d);
}
});
}
如果我在同一IP中托管的页面中使用此功能,则它会按预期工作。但是如果我从不同的IP(例如:127.0.0.1)访问它,那么我在IE中获得“Permission Denied”,在FireFox中获得“404 Object Not Found”。< / p>
如何使用ASP.NET编写可以从任何地方远程使用的Web服务,以及使用它的Javascript应该是什么。
我发现的每个示例都指向托管在同一项目目录中的WebService。
答案 0 :(得分:2)
您无法使用其他域中的Web服务或任何Web资源(无法访问跨域Web服务)。您只能从您的域中访问资源。
相反,你可以使用Dynamic Script Tag或JSONP黑客技术来实现这一目标。
答案 1 :(得分:0)
在您为此Web服务提供服务的计算机上,确保Web服务器(IIS)允许远程连接。如果我没有弄错,开发Web服务器不允许远程连接,至少在默认情况下是这样。
答案 2 :(得分:0)
使用远程Web服务(那些不存在于同一网站域中)的最佳方式是通过PHP(或类似的服务器端脚本)传递请求。对于PHP,您可以按照以下步骤进行操作:
您在example.com上托管的html网页需要在example2.com中托管远程服务。
您在example.com上托管的html页面通过PROXY从位于同一example.com域的PHP脚本中读取服务:
$ .ajax({..bla ...,url:'/ textpspts / proxy.php'});
example.com上托管的/phpscripts/proxy
是谁将使用CURL php库与example2.com进行通信。它将从example2.com收到一个html响应(或其他内容,取决于Web服务),然后将处理过的消息重新传输回example.com中托管的html页面。您可以使用,success(html){ }
对象中的$.ajax
参数在example.com中捕获此响应。