1.本域內調用WCF
a.新建“WCF服務應用程序”(注:使用的是系統自動生成的服務),服務接口加個Namespace屬性,例如Namespace="http://www.ccniit.com"
b.修改.svc文件(
技巧:點擊不能打開,找到相應目錄,雙擊打開),加個屬性
Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory"
表示可用腳本調用WCF服務;
c.如果使用微軟的ScriptManager,則配置其services屬性,地址一定要使用“~",讓ScriptManager自動生成代理js腳本(這個js腳本其時
在IE瀏覽中瀏覽.svc文件時,加個/js可自動得到),調用有點意思:
要先生成對象 var service=new www.123.com.iservice1();//這里是用的a步驟中的服務接口名全小寫;
service.方法調用//和ScriptManager調用.asmx完全一樣;
稍要着重注意的是調用GetDataUsingDataContract方法:
//調用GetDataUsingDataContract方法
var service = new www.ccniit.com.iservice1();
var comType = new WcfService1.CompositeType();
comType.BoolValue = true;
comType.StringValue = "huangbo";
service.GetDataUsingDataContract(comType, DealRes);
function DealRes(res) {
alert(res.StringValue); //StringValue是CompositeType的一個屬性
}
d.jQuery調用示例:
//調用GetData方法
$.ajax({
url: "Service1.svc/GetData",//調用GetData方法
type: "POST",
dataType: "json",
contentType: "application/json",
data: '{"value":123}',//傳遞參數值(參數名叫value)
success: function (data) {
alert(data.d);
}
});
//調用GetDataUsingDataContract方法
/*composite:參數名
CompositeType:參數類型
WcfService1:CompositeType定義的命名空間
BoolValue和SringValue:CompositeType中的屬性*/
var datas = '{"composite":
{"__type":"CompositeType:http://schemas.datacontract.org/2004/07/WcfService1","BoolValue":true,"StringValue":"huangbo"}}';
$.ajax({
url: "Service1.svc/GetDataUsingDataContract",
type: "POST",
dataType: "json",
contentType: "application/json;charset=utf-8",
data: datas,
success: function (res) {
alert(res.d.StringValue);
}
});
用Fiddler跟蹤,得到的都是JSON格式;
2.跨域調用WCF(僅限於JQuery)
a.使用JSONP
(1)先建立“空白網站”;
(2)在網站中添加新項-“啟用了AJAX的WCF服務",IDE地自動在Web.Config中添加一系列東西;
(3)打開服務類,
在類聲明頭部添加[JavascriptCallbackBehavior(UrlParameterName="jsoncallback")],
方法定義處添加
[WebGet(ResponseFormat = WebMessageFormat.Json)]
(4)在web.config中添加Forms身份驗證:
<authentication mode="Forms" />(這句必須要,否則不能調用成功)
(5)使用WCF配置管理工具,添加”綁定”,選"webHttpBinding",設定"crossDomainScriptAccessEnabled="true"
(6)在服務的終結點定義中,設定"BindingConfiguration"為步驟(5)中設定的Binding
(5)使用JQuery的$.getJSON方法(DoWork是要調用的方法)
//不需要參數
$.getJSON("http://localhost:2801/WebSite3/Service.svc/DoWork?jsoncallback=?", function (data) {
alert(data);
});
//需要參數(name是參數名)
$.getJSON("http://localhost:3115/WebSite4/Service.svc/DoWork?jsoncallback=?", { "name": "huangbo" }, function (data)
{
alert(data);
});
這里發現使用WCF服務,並發布到IIS上,以https傳輸,Fiddler是無法捕捉信息的,以https提供服務,可參考:
http://www.cnblogs.com/bearhb/archive/2012/07/02/2573236.html
