0

我正在开发一个 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 模板,没有任何更改。现在我只需要使用 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>

我得到三个例外:

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

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

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

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

非常感谢您提前。

4

1 回答 1

0

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


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

2如果您这样做 - 只有一个非 SOAP 端点,WCF 测试客户端将无法再使用它,但这是意料之中的,因为它会尝试使用服务 WSDL 与之对话

于 2012-10-20T21:28:24.997 回答