jquery调WCF

简介: 在项目中用过一些WCF的技术这篇文章是对以前用过的一点东西的一个梳理   一,webconfig的配置除了一般的配置外,与WCF相关的配置如下                                                                           ...

在项目中用过一些WCF的技术
这篇文章是对以前用过的一点东西的一个梳理

 

一,webconfig的配置
除了一般的配置外,与WCF相关的配置如下

< system.serviceModel >
    
< behaviors >
      
< endpointBehaviors >
        
< behavior  name ="AllenBehavior" >
          
< enableWebScript  />
        
</ behavior >
      
</ endpointBehaviors >
    
</ behaviors >
    
< serviceHostingEnvironment  aspNetCompatibilityEnabled ="true"   />
    
< services >
      
< service  name ="jqueryWCF.WCFservice" >
        
< endpoint  address =""  behaviorConfiguration ="AllenBehavior"   binding ="webHttpBinding"  contract ="jqueryWCF.WCFservice"   />
      
</ service >
    
</ services >
  
</ system.serviceModel >

其中<service>节点中的name属性,是实现了服务契约的类型名,类型名必须是完整的,要包括名称空间
<endpoint>节点的address属性为空,说明使用基地址.
behaviorConfiguration属性与behavior节点的name属性相匹配
binding属性说明WCF服务使用什么协议,这里是HTTP协议
contract属性是描述契约的接口名称,也必须是完整的.如果没有接口直接写实现契约的类型名也可以(我这里就是这样).

<behavior>节点的信息是描述WCF服务端的一些特性,行为的
<behavior name="AllenBehavior"> name属性与前面说的behaviorConfiguration属性一致
<enableWebScript />节点使我们的WCF支持ajax

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
与后端的AspNetCompatibilityRequirements配合使用

 

二:页面中的js代码
这段JS是写在JQUERY框架下面的
function callServer(){
var id 
=  Number($( " #id " ).val());
var title 
=  String($( " #title " ).val());
var content 
=  String($( " #content " ).val());
    $.ajax({
        type: 
' post ' ,
        url: 
' /WCFservice.svc/InsertRow ' ,
        contentType: 
' text/json ' ,
        data: 
' {"id": ' + id + ' ,"title":" ' + title + ' ","content":" ' + content + ' "} ' ,
        success: function(msg) {
        var a 
=  eval( ' ( ' + msg + ' ) ' );
        
if (String(a.d).length > 0 ){alert(a.d);}
        
else {alert( " 服务器超时 " );}
        }
    });
    }
其中
$.ajax(.....)是框架提供的一个调用ajax的方法,兼容目前大多数浏览器

url: '/WCFservice.svc/InsertRow'
这里是WCF的地址+方法名

 

contentType: 'text/json',
这是以JSON的方式POST数据,当然也可以用XML的方式(要配合WCF后端的定义)

 

data: '{"id":'+id+',"title":"'+title+'","content":"'+content+'"}',
数据必须按照InsertRow方法的签名传递(这里稍有不慎就出错了,而且js的调试比较难搞)

 

success: function(msg) {}
成功后的回调函数,msg参数是一个object类型的,要eval()一下才能得到里面的数据

 

三:后端WCF代码
using  System;
using  System.Linq;
using  System.Runtime.Serialization;
using  System.ServiceModel;
using  System.ServiceModel.Activation;
using  System.ServiceModel.Web;

namespace  jqueryWCF
{
    [ServiceContract(Namespace 
=   "" )]
    [AspNetCompatibilityRequirements(RequirementsMode 
=  AspNetCompatibilityRequirementsMode.Allowed)]
    
public   class  WCFservice
    {
        [OperationContract]
        [WebInvoke(RequestFormat 
=  WebMessageFormat.Json, ResponseFormat  =  WebMessageFormat.Json, BodyStyle  =  WebMessageBodyStyle.WrappedRequest)]
        
public   string  InsertRow( int  id, string  title, string  content)
        {
            
return   string .Format( " 您输入的标题是:{0}\n\n您输入的内容是:{1}\n\n此文章的id是:{2} " ,title,content,id.ToString());
        }
    }
}

系统要引用System.ServiceModel.Web的DLL默认是不引用的
ServiceContract属性把此类型公开在WCF服务中
AspNetCompatibilityRequirements属性确保端点使用了WEBHTTP绑定模型
与webconfig中的<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />配合使用

OperationContract属性把方法公开在WCF服务中

RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json
说明传递近来的数据都是JSON形式的,只有两种形式,一个是JSON,一个是XML.
(我觉得JSON更"对象"一点,XML更"数据"一点)

 

BodyStyle = WebMessageBodyStyle.WrappedRequest
是把参数包装一下
这样可以传递多个参数进来,
我猜返回值之所以是一个javascript的对象(json流得来的对象)也是因为这里



项目示例: 点此下载
目录
相关文章
|
Web App开发 JavaScript 前端开发
一起谈.NET技术,舍WebService 用.NET4中jQuery调用WCF
  在我们之前的开发中,对于ajax程序,都是通过jQuery调用标记为[System.Web.Script.Services.ScriptService]的WebService,然后在WebService中调用后台的WCF。
932 0
|
Web App开发 JavaScript 前端开发
一起谈.NET技术,抛弃WebService,在.NET4中用 jQuery 调用 WCF
  在我们之前的开发中,对于ajax程序,都是通过jQuery调用标记为[System.Web.Script.Services.ScriptService]的WebService,然后在WebService中调用后台的WCF。
952 0
|
Web App开发 JavaScript 前端开发
舍WebServic“.NET研究”e 用.NET4中jQuery调用WCF
  在我们之前的开发中,对于ajax程序,都是通过jQuery调用标记为[System.Web.Script.Services.ScriptService]的WebService,然后在WebService中调用后台的WCF。
833 0
|
Web App开发 JavaScript 前端开发
抛弃WebService,在.NE“.NET研究”T4中用 jQuery 调用 WCF
  在我们之前的开发中,对于ajax程序,都是通过jQuery调用标记为[System.Web.Script.Services.ScriptService]的WebService,然后在WebService中调用后台的WCF。
945 0
|
Web App开发 JSON JavaScript
jQuery调用WCF需要注意的一些问题
昨天,博客园首页增加了Digg功能。在该功能中我们开始尝试使用jQuery直接调用WCF。之前我们采用的方案是jQuery调用Web Service,然后WebService再调用服务层。这样调用主要是因为之前需要调用不同域名下的WCF服务,因为跨域调用的问题,就要通过Web Service中转一下。
1067 0
|
JavaScript 前端开发 C#
jQuery调用RESTful WCF示例(GET方法/POST方法)
不废话了,直奔主题吧 wcf端: 近几年比较流行restful,为了能让ajax调用,同时也为了支持restful风格的uri,在创建一个Ajax-enabled Wcf Service后,必须手动修改svc文件,指定Factory,即: 注:如果不添加Factory,则wcf将无法用类似http://localhost/helloWorld.svc/Hello/person/name 的restful方式直接访问。
1021 0
|
6月前
|
JavaScript
Jquery插件知识之Jquery.cookie实现页面传值
Jquery插件知识之Jquery.cookie实现页面传值
36 0
|
7月前
|
JavaScript
jQuery 插件自用列表
jQuery 插件自用列表
29 0