【问题标题】:How to consume WCF service in Windows8 HTML5/JS app?如何在 Windows8 HTML5/JS 应用程序中使用 WCF 服务?
【发布时间】:2012-10-20 20:40:12
【问题描述】:

我正在开发一个 win8 应用程序,它应该使用托管在 IIS 上的 WCF 服务,但它不会... 注意:Web 服务运行良好。我已经在 VS2012 中使用 WCF 测试客户端对其进行了测试 这是我的代码:

IService.cs:

using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

[ServiceContract]
public interface IService
{

[OperationContract]
string SitePredmeti();

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Xml)]
List<Profesor> SiteProfesori();
}

我做了两种方法:一种返回 xml,另一种返回 json,这样我就可以测试哪一种有效。 WS返回json或xml都没有关系,我可以在应用程序中使用。

我在 win8 中为 html5/JS 应用程序使用默认的 SPLIT APP TEMPLATE,没有任何更改。现在我只需要使用 wcf 服务,稍后我会处理数据模板。

我的 iis 托管 wcf 的 URL:

http://localhost/InformatorWS/Service.svc

这是我迄今为止尝试过的:

var baseURl = "http://localhost/InformatorWS/Service.svc/SitePredmeti/";
var url  = baseURl+Number1.value+"/"+Number2.value;  
WinJS.xhr({ url: url  }).then(function  (r)  {
var result  = JSON.parse(r.responseText);
ResultSpan.innerHTML  = result;  });

我在这里遇到的错误是:

{"exception":null,"error":{},"promise":{"_oncancel":null,"_nextState":null,"_state":>{"name":"error","done ":null,"then":null},"_listeners":null,"_value":{},"_isException":false,"_errorId":2},"id":2}

接下来我尝试通过 jquery ajax 调用它:

$(document).ready(function () {
        jQuery.support.cors = true;
        //Calling WCF Service using jQuery ajax method
        $.ajax({
            type: "GET",
            async: "false",
            url: "http://localhost/InformatorWS/Service.svc/SitePredmeti",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            processData: true,
            success: function (result) {
                //AjaxSucceeded(result);
                alert('ok')
            },
            error: alert('ne ok')
        });
    });

当我链接 jquery 时

<script type="text/javascript" src="js/jquery-ui-1.8.9.custom.min.js"></script>
<script type="text/javascript" src="js/jquery-1.4.3.js"></script>

我得到三个例外:

第 10 行第 2 列未处理的异常 ms-appx://66b782f9-8814-4b8e-a2e3-d6e73893690a/js/jquery-ui-1.8.9.custom.min.js 0x800a1391 - JavaScript 运行时错误:'jQuery' 未定义

(其中两个 - 用于成功和错误的两个警报)

第 8 行第 9 列未处理的异常 ms-appx://66b782f9-8814-4b8e-a2e3-d6e73893690a/js/default.js 0x800a1391 - JavaScript 运行时错误:“警报”未定义

有人知道我做错了什么吗?或者只是任何人都知道使用 IIS 上托管的 WCF 服务的任何方式?

非常感谢您。

【问题讨论】:

  • 在 jquery UI 之前包含 jquery,这应该可以解决您的 jquery 未定义问题。您可以尝试允许获取网络服务,看看是否可以使用浏览器使用它。

标签: javascript wcf html iis windows-8


【解决方案1】:

这里可能存在几个问题。您需要 WCFTestClient 和 JavaScript 使用不同的端点。首先,您需要一个 SOAP 端点,但对于第二个,您需要一个非 SOAP(又名 REST)端点。由于您没有在问题中提及,我假设您只有一个端点,并且由于 WCFTestClient 有效,因此它是一个 SOAP 端点,不适用于 JavaScript 1。如果是这种情况,请向您的服务添加一个新的 Web 端点(或用该端点替换现有的)2。您可以在 MSDN 的 WCF Web HTTP Programming Model 文档中阅读有关 Web 端点的更多信息。


1 理论上,可以使用 JavaScript 调用 SOAP 端点(特别是如果端点使用一些简单的绑定,例如 BasicHttpBinding)。但是您需要创建 XML 有效负载以发送给它,并根据 SOAP 规范对其进行格式化 - 而不是您正在发送和期望的 JSON 有效负载。

2 如果您这样做 - 只有一个非 SOAP 端点,WCF 测试客户端将不再使用它,but that's expected, since it tries to consume the service WSDL to talk to it

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 2013-06-02
    • 2013-09-30
    相关资源
    最近更新 更多