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