艾伟:WCF以Json格式返回对象,客户端以JS调用显示

简介: 很少写东西,但是看到别人写的文章自己又禁不住写点,写了有时候又觉得不好意思给大家看!今天好不容易鼓起勇气写点……这几天看了一些WCF的资料第一感觉是:这玩艺太深了第二感觉是:这玩艺,挺麻烦的(光配置就搞不明白)今天调了半天,好不容易把这个返回Json对象,在客户端展示的实例给整理出来了。

很少写东西,但是看到别人写的文章自己又禁不住写点,写了有时候又觉得不好意思给大家看!

今天好不容易鼓起勇气写点……

这几天看了一些WCF的资料

第一感觉是:这玩艺太深了

第二感觉是:这玩艺,挺麻烦的(光配置就搞不明白)

今天调了半天,好不容易把这个返回Json对象,在客户端展示的实例给整理出来了。下面分享给大家

此实例:以IIS为Host承载

1、先建一个WCF Service

建一个ServiceContract接口 1 [ServiceContract]

 2  public   interface  IJsonWCFService
 3  {
 4       ///  
 5       ///  GetJsonResult
 6       ///  
 7       ///  
 8       ///  
 9       ///  
10       ///  
11       ///  为实现Json序列化,添加属性
12       ///  [WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessage
BodyStyle.Wrapped)]
13       ///  
14       ///  
15      [OperationContract]
16      [WebInvoke(ResponseFormat  =  WebMessageFormat.Json, BodyStyle  =  WebMessageBody
Style.Wrapped)]
17      JsonResult GetJsonResult( string  name,  string  address,  string  phone);
18  }

实现这个接口

 

 1  public   class  JsonWCFService : IJsonWCFService
 2  {
 3       #region  IJsonWCFService Members
 4       ///  
 5       ///  Implement the interface
 6       ///  
 7       ///   Name
 8       ///   Address
 9       ///   PhoneNumber
10       ///   JsonResult
11       public  JsonResult GetJsonResult( string  name,  string  address,  string  phone)
12      {
13          JsonResult result  =   new  JsonResult(name, address, phone);
14           return  result;
15      }
16       #endregion
17  }

 

这个地方好像忘记了一个返回的DataContract类

 

 1  [DataContract]
 2  public   class  JsonResult
 3  {
 4       ///  
 5       ///  Construct
 6       ///  
 7       public  JsonResult( string  name,  string  address,  string  phone)
 8      {
 9          _name  =   string .Format( " Name:{0} " , name);
10          _address  =   string .Format( " Address:{0} " , address);
11          _phoneNumber  =   string .Format( " PhoneNubmer:{0} " , phone);
12      }
13 
14       private   string  _name;
15       ///  
16       ///  Name
17       ///  
18      [DataMember]
19       public   string  Name
20      {
21           get  {  return  _name; }
22           set  { _name  =  value; }
23      }
24       private   string  _address;
25       ///  
26       ///  Address
27       ///  
28      [DataMember]
29       public   string  Address
30      {
31           get  {  return  _address; }
32           set  { _address  =  value; }
33      }
34       private   string  _phoneNumber;
35       ///  
36       ///  PhoneNumber
37       ///  
38      [DataMember]
39       public   string  PhoneNumber
40      {
41           get  {  return  _phoneNumber; }
42           set  { _phoneNumber  =  value; }
43      }

 

 2、为实现Json序列化设置,我们还得添加一个WebContentTypeMapper

(此类最终会用在Service的配置文件中)

 

 1  using  System.ServiceModel.Channels;
 2 
 3  namespace  Microsoft.Ajax.Samples
 4  {
 5       ///  
 6       ///  JsonContentTypeMapper
 7       ///  用在配置中
 8       ///  
 9       public   class  JsonContentTypeMapper : WebContentTypeMapper
10      {
11           public   override  WebContentFormat GetMessageFormatForContentType( string  contentType)
12          {
13               if  (contentType  ==   " text/javascript " )
14              {
15                   return  WebContentFormat.Json;
16              }
17               else
18              {
19                   return  WebContentFormat.Default;
20              }
21          }
22      }
23  }

 

3、添加svc文件,便于发布Service

svc文件其实是十分简单的一个文件,以下是SVC文件中的内容,可以将此文件添加在网站项目的根目录,也可以是一个子目录。对此没有太多的要求。

 

1  <% @ ServiceHost Language = " C# "  Debug = " true "  Service = " JsonWCFService "   %>

 

4、添加web.config文件

WCFService中相当一部分知识是关于配置的,关于这些内容,一直在“研究”。还没有理出来一个比较顺的思路!

 

 1  xml version="1.0"?>
 2 <configuration>
 3   <appSettings/>
 4   <connectionStrings/>
 5   <system.web>
 6 
 7    system.web>
 8   <system.serviceModel>
 9     <behaviors>
10       <endpointBehaviors >
11         <behavior name="jsonWcfBehavior">
12           <webHttp/>
13          behavior>
14        endpointBehaviors>
15      behaviors>
16     <bindings>      
17       <customBinding>        
18         <binding name="JsonMapper">
19           
20           <webMessageEncoding webContentTypeMapperType="Microsoft.Ajax.Samples.JsonC
ontentTypeMapper, JsonContentTypeMapper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=
null"
>
21            webMessageEncoding>
22           <httpTransport manualAddressing="true"/>
23          binding>
24        customBinding>
25      bindings>
26     <services>      
27       <service name="JsonWCFService" >
28         
29         <endpoint address="ajaxEndpoint" behaviorConfiguration="jsonWcfBehavior"
30                   binding="customBinding"
31                   bindingConfiguration="JsonMapper" contract="IJsonWCFService">
32          endpoint>
33        service>
34      services>
35    system.serviceModel>
36  configuration>

 

 到此为止,Service算是提供完了,可以运行一下看一下结果。

5、剩下的就是客户端的问题,我们来实现客户端调用WCFService的方法

客户端的内容不算太复杂,其中一好多部分内容我自己觉得:应该是固定写法

 

 1  < html  xmlns ="http://www.w3.org/1999/xhtml" >
 2  < head >
 3       < title > Json Service Rresult title>
 4 
 5     <script language="javascript" type="text/javascript">
 6         function Call(contentType) {
 7             var name = document.getElementById("name").value;
 8             var address = document.getElementById("address").value;
 9             var phone = document.getElementById("phone").value;
10             if (name && address && phone) {
11                 // Create HTTP request
12                 var xmlHttp = CreateHttpRequest();
13                 if (xmlHttp == null) {
14                     alert("此实例只能在支持Ajax的浏览器中运行");
15                 }
16 
17                 // Create result handler
18                 xmlHttp.onreadystatechange = function(){
19                     if (xmlHttp.readyState == 4) {
20                         var result = eval("(" + xmlHttp.responseText + " )").GetJsonResultResult;
21                         var html = result.Name + "
";
22                         html += result.Address + "
";
23                         html += result.PhoneNumber + "
";
24                         document.getElementById("divMessagePanel").innerHTML = html;
25                     }
26                 }
27                 //初始化操作Url
28                 //tools.self.com:站点发布的域名
29                 //ajaxEndpoint请参阅web.config中配置
30                 //ajaxEndpoint" behaviorConfiguration="jsonWcfBehavior"
31                 //  binding="customBinding"
32                 //  bindingConfiguration="JsonMapper" contract="IJsonWCFService">
33                 //
34                 //GetJsonResult:服务方法名称
35                 var url = "http://tools.self.com/Json/JsonWCFService.svc/ajaxEndpoint/GetJsonResult";
36 
37                 //初始化Json消息
38                 var body = '{"name":"';
39                 body = body + name + '","address":"';
40                 body = body + address + '","phone":"';
41                 body = body + phone + '"}';
42                 //发送Http请求
43                 xmlHttp.open("POST", url, true);
44                 xmlHttp.setRequestHeader("Content-type", contentType);
45                 xmlHttp.send(body);
46             }
47         }
48         //创建HttpRequest对象
49         function CreateHttpRequest() {
50             var httpRequest;
51             try {
52                 httpRequest = new XMLHttpRequest();
53             }
54             catch (e) {
55                 try {
56                     httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
57                 }
58                 catch (e) {
59                     try {
60                         httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
61                     }
62                     catch (e) {
63                         return null;
64                     }
65                 }
66             }
67             return httpRequest;
68         }        
69         
70      script>
71  head>
72 <body>
73     <h1>
74         JsonContentTypeMapper 客户端页面 h1>
75     <p>
76         姓名:
77         <input type="text" id="name" /> p>
78     <p>
79         地址:
80         <input type="text" id="address" /> p>
81     <p>
82         电话号码:
83         <input type="text" id="phone" /> p>
84     <input type="button" onclick="return Call('text/javascript');" value="application/json" /><br />
85     <br />
86     <div style="font-size: 16px; color: red" id="divMessagePanel">
87      div>
88  body>
89  html>
90 
91 

 

 到此整个功能算是完成了。

Service,Host,Client都有了,功德圆满,大家可以运行看一下结果。

目录
相关文章
|
28天前
|
JavaScript 前端开发
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
|
1月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
35 4
|
29天前
|
算法 开发者
Moment.js库是如何处理不同浏览器的时间戳格式差异的?
总的来说,Moment.js 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
35 1
|
1月前
|
JSON JavaScript Java
对比JSON和Hessian2的序列化格式
通过以上对比分析,希望能够帮助开发者在不同场景下选择最适合的序列化格式,提高系统的整体性能和可维护性。
43 3
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
JSON Java 数据格式
springboot中表字段映射中设置JSON格式字段映射
springboot中表字段映射中设置JSON格式字段映射
121 1
|
1月前
|
开发框架 JavaScript 前端开发
Node.js日记:客户端和服务端介绍、Node.js介绍
Node.js日记:客户端和服务端介绍、Node.js介绍
|
1月前
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
|
1月前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一