在不同的项目中对.svc进行AJAX函数调用

时间:2011-05-13 00:52:41

标签: c# asp.net ajax wcf

我的Visual Studio解决方案中有两个项目:MyApp.WebService和MyApp.WebUI。

我在/Views/Home/Index.aspx的WebUI项目中有一个视图页面,进行了这个ajax调用:

$.ajax({
    type: "GET",
    url: "MyService.svc/HelloWorld",
    data: null,
    processData: true,
    contentType: "application/json",
    dataType: "json", 
    cache: false,
    success: function (data) {
        alert(data.d);
    }
});

我的WebService项目的根目录中有一个.svc文件,名为MyService.svc,其中包含此函数:

[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public string HelloWorld()
{
    return "Hello, world!";
}

我收到一条错误消息,说它无法找到我正在呼叫的网址的位置。我怀疑它与.svc文件在另一个项目中有关。有什么我需要做的事情来称呼它吗?

1 个答案:

答案 0 :(得分:1)

如果您使用两个不同的项目,那么项目将托管在不同的端口(VS的默认设置)或不同的虚拟目录中。无论哪种方式,从一个项目到另一个项目的请求都不会起作用。如果你有两个不同端口的项目(例如,6789的MyApp.WebService和7890的MyApp.WebUI),那么从/Views/Home/Index.aspx(实际上是http://machine-name:7890/Views/Home/Index.aspx)到MyService.svc的调用/ HelloWorld将发送到http://machine-name :7890 /MyService.svc/HelloWorld,而它应该是http://machine-name :6789 / MyService .svc.HelloWorld。打开页面时运行Fiddler将显示正在进行调用的地址。此外,如果右键单击VS上的MyService.svc并选择“在浏览器中查看”,它将显示调用的确切地址