如何在Windows8 HTML5 / JS应用程序中使用WCF服务?

时间:2012-10-20 20:40:12

标签: javascript wcf html5 iis windows-8

我正在开发一个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中使用默认的SPLIT APP TEMPLATE用于html5 / JS应用程序,没有任何变化。现在我只需要使用wcf服务,稍后我会处理数据模板。

我的iis的网址托管了wcf:

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;  });

我得到的错误是:

  

{ “异常”:NULL, “错误”:{}, “承诺”:{ “_ oncancel”:空, “_ nextState”:空, “_状态” 产品:&gt; { “名称”: “错误”,”完成 “:空”,然后 “:空},” _听众 “:空,” _值 “:{},” _ isException “:假,” _ 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运行时错误:'alert'未定义

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

非常感谢你。

1 个答案:

答案 0 :(得分:0)

这里可能有几个问题在起作用。您需要WCFTestClient和JavaScript使用不同的端点。首先,您需要一个SOAP端点,但对于第二个,您需要一个非SOAP(a.k.a. 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