我正在开发一个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服务的任何方式?
非常感谢你。
答案 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。