1

我正在尝试使用本地地址从其他项目调用 WCF 服务。我在同一个解决方案资源管理器中有两个项目。一个项目有服务,另一个是一个 Web 应用程序,我在其中使用 javascript 中的 Ajax 来调用 WCF 服务。以下是我的javascript代码,

function sclick() {
    alert("m here");
    $.ajax({
        type: "POST",
        url: "http://localhost:4780/Service1.svc/myfunction",
        contentType: "application/json; charset=utf-8 ",
        dataType: "json",
        success: success,
        error: fail
    })

}

function success(result) {
    alert(result);
   //alert("Success" + result.myfunctionResult);
}

function fail(result) {
    alert("Fail..... " + result.statusText + ": " + result.status);
}

流程转到成功功能,但我在结果对象中得到空值。ajax 部分中的 URL 是我在浏览器中查看 service1.svc 文件得到的 URL。谁能告诉我哪里出错了!它在同一个项目中运行良好。但是跨域不起作用。当我从其他项目调用服务时,它返回 null。我在服务中给出了断点。断点显示正确的值,但它没有出现在我的 javascript 代码中。

4

3 回答 3

0

我认为您的问题可能是 WCF 不支持开箱即用的跨域,除非您启用 CORS。

这里有很好的解释和解决方法:http: //blogs.msdn.com/b/carlosfigueira/archive/2012/05/15/implementing-cors-support-in-wcf.aspx

对您来说可能更容易的另一种选择是将 WebAPI 放入您正在使用的任何项目中,可以很容易地在 WebForms 或 MVC 中做到这一点。

于 2013-06-20T04:40:09.257 回答
0

您不应该通过常规 Web 服务调用与开箱即用的 WCF 服务对话,这是可能的,但更复杂。请参阅:http ://social.msdn.microsoft.com/Forums/vstudio/en-US/c896b564-7a9b-423d-a42d-d36c33c46e7d/consume-a-wcf-service-as-a-url

这是因为 WCF 具有框架使用的数据“开销”。另外,WCF 配置可能不同:它可能是 REST、SOAP 甚至 Tcp 或命名管道。

更简单的方法是生成 WCF 客户端:http: //msdn.microsoft.com/en-us/library/ms733133.aspx

而不是从 ajax 调用客户端代理,而不是尝试直接调用服务器。

这是假设您在 .Net Web 应用程序上运行。否则,请参阅如何直接与服务交谈。这是一个关于如何使用 Java 执行此操作的示例:http: //hoonzis.blogspot.co.il/2011/07/sumption-wcf-services-with-java-client.html

最后,这里建议但后来被删除的另一个好答案是配置 WCF 服务以支持 REST API,如下所示:http: //www.codeproject.com/Articles/128478/Consuming-WCF-REST-Services -使用-jQuery-AJAX-Call

于 2013-06-19T05:48:58.330 回答
0

不了解 WCF Web 服务,但可能是这些用于常规服务的代码行,解决您的问题

          var jsonData = [YOUR JSON PARAMETER];

            $.ajax({
                async: false,
                type: "POST",
                url: [YOUR WEB SERVICE URL],
                contentType: "application/json; charset=utf-8",                  
                data: JSON.stringify({ json: jsonData }),
                dataType: "json",                
                success: OnSuccess,
                failure: function(err) {
                    alert("Error : " + err.d);
                }  
            }); 

            function OnSuccess(data) {
                alert("Success:" + data.d);                       
            }

您可以为此做一件事,只需在您的 Web 服务 web.config 文件中的 CustomeHeaders 中设置 Access-Control-Allow-Origin 和 Access-Control-Allow-Headers。

 <add name="Access-Control-Allow-Origin" value="*" />
 <add name="Access-Control-Allow-Headers" value="Content-Type" />

如果您只想允许特定域,则可以使用域的特定值而不是 * 值来执行此操作

于 2017-03-01T12:52:20.843 回答