艾伟: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都有了,功德圆满,大家可以运行看一下结果。

目录
相关文章
|
4天前
|
JSON Java 数据格式
springboot中表字段映射中设置JSON格式字段映射
springboot中表字段映射中设置JSON格式字段映射
19 1
|
3天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
9天前
|
开发框架 JavaScript 前端开发
Node.js日记:客户端和服务端介绍、Node.js介绍
Node.js日记:客户端和服务端介绍、Node.js介绍
|
13天前
|
JSON 人工智能 算法
探索LLM推理全阶段的JSON格式输出限制方法
文章详细讨论了如何确保大型语言模型(LLMs)输出结构化的JSON格式,这对于提高数据处理的自动化程度和系统的互操作性至关重要。
|
19天前
|
存储 JSON JavaScript
JavaScript JSON
【10月更文挑战第7天】JSON 是 JavaScript 中非常重要的一个数据格式,它为数据的表示和传输提供了一种简单而有效的方式。掌握 JSON 的使用方法和特点,对于开发高质量的 JavaScript 应用具有重要意义。
|
1月前
|
JSON 数据格式
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
60 2
|
1月前
|
JSON JavaScript 前端开发
js如何格式化一个JSON对象?
js如何格式化一个JSON对象?
53 3
|
24天前
|
JSON API 数据格式
商品详情数据JSON格式示例参考(api接口)
JSON数据格式的商品详情数据通常包含商品的多个层级信息,以下是一个综合多个来源信息的JSON数据格式的商品详情数据示例参考:
|
1月前
|
前端开发 网络协议
Nest.js 实战 (十四):如何获取客户端真实 IP
这篇文章介绍了在Nest.js应用中获取客户端真实IP地址的问题及解决方法。问题出现在使用本地代理时,请求的IP地址总是返回::1或::ffff:127.0.0.1。为解决这个问题,需要确保代理服务器正确设置转发头如X-Forwarded-For或X-Real-IP,后端服务能够读取这些头信息来确定客户端的IP地址。文章以作者自己的OpenResty应用为例,展示了如何通过配置反向代理和设置X-Forwarded-For头来获取真实IP地址,并提供了相关的代码示例。最后,文章提到了使用这个解决方案后的实际效果,例如在操作日志中记录真实IP地址。
|
1月前
|
机器学习/深度学习 JSON JavaScript
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
22 0
下一篇
无影云桌面