博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF完美搭建android平台服务之一
阅读量:5161 次
发布时间:2019-06-13

本文共 6815 字,大约阅读时间需要 22 分钟。

     由于android系统的特殊性,对于wcf的平台服务的搭建就带来特殊要求,在这两种平台应用上数据的通用性而讲,能实现其信息的传递,我们可以采用JSON/XML两种数据数据格式传递,在wcf服务的搭建的时候我们就需要将数据序列化成这两种类型。

    在查阅MSDN中我们找到了,这两种数据格式的数据契约进行了定义,详细参照:

我们使用webHttpEndpoint配置终结点,在WebHttpEndPoint的默认数据格式为xml,而WebScripEndpoint的默认格式为JSON,一般在定义数据格式的时候我们采用WebGetAttribute或者WebInvokedAttribute属性(后者可以指定客户端访问模式get/post),这样样式特定于webhttp行为,对其JSON/Xml数据格式进行设置

[OperationContract] [WebInvoke(ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped)] MathResult DoMathXml(double n1, double n2);

另一个操作使用 WebInvokeAttribute 属性并显式指定响应的 JSON(而不是 XML)。

OperationContract] [WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)] MathResult DoMathJson(double n1, double n2);
请注意,在这两种情况下,操作均返回一个复杂类型 MathResult,该类型是一个标准的 WCF 数据协定类型。
其实这两种数据格式的创建使用用于ajax客户端或者jquery使用,因为其数据格式被序列成JSON或者XML,这两者同样的适合于android平台使用,所以
我们应用这两种数据格式为android平台提供服务,这里有几个点需要注意:
 1、当客户端我们需应用JSON数据格式的时候,我们必须显示的将 (或 )属性设置为 。
2、当开启客户端数据回传方式的时候我们如果需要指定,我们需要WebInvoke设置其方式: [WebInvoke(Method = "GET"]
下面通过一个案例综合来实现我们测操作:
第一步,新建数据实体,记住添加引用(using System.Runtime.Serialization)和(using System.ServiceModel)
using System; using System.Runtime.Remoting; using System.Runtime.Serialization;  //实现数据序列化 namespace AndroidHost {
//// /// Suident实体类 /// [DataContract] public class Sutdent {
//// /// 用户名 /// [DataMember(Order = 0)] public string Name { get; set; } /// /// 生日 /// [DataMember(Order = 1)] public DateTime DayOfbirth { get; set; } } }
第二步、新建json的服务契约,注释很详细
using System; using System.ServiceModel; using System.ServiceModel.Web; namespace AndroidHost {
/// /// 演示IStudentJson的接口 /// ///
/// HTTP方法中: /// PUT相当于Create /// GET相当于Read /// POST相当于Update /// DELETE相当于Delete /// 即(Method方式定义了http里面方法的名称) ///
[ServiceContract] public interface IStudentJson {
/// /// 创建学生 /// ///用户名 ///生日 ///
/// WebInvoke - 指示服务操作在逻辑上就是调用操作,而且可由 Web 编程模型调用 /// UriTemplate - 用于服务操作的统一资源标识符 (URI) 模板。URI模板可以将一个 URI 或一组 URI 映射到服务操作。有关 URI 模板的更多信息,请参见 UriTemplate 和 UriTemplateTable /// Method - 与操作关联的协议方法,默认为 POST /// ResponseFormat - 指定从服务操作发出的响应的格式。Xml 或 Json /// BodyStyle-指定body里面的封装 ///
[OperationContract] [WebInvoke( UriTemplate = "User/{name}/{dayOfbirth}", Method = "PUT", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare )] Sutdent CreateUser(string name, string dayOfbirth); /// /// 获取用户信息 /// ///用户名 ///
/// WebGet - 指示服务操作在逻辑上就是检索操作,而且可由 Web 编程模型调用 ///
[OperationContract] [WebGet( UriTemplate = "User/{name}", ResponseFormat = WebMessageFormat.Json)] Sutdent GetUser(string name); /// /// 更新用户信息 /// ///用户名 ///生日 ///
[OperationContract] [WebInvoke(UriTemplate = "User/{name}/{dayOfbirth}", Method = "POST", ResponseFormat = WebMessageFormat.Json)] bool UpdateUser(string name, string dayOfbirth); /// /// 删除用户信息 /// ///用户名 ///
[OperationContract] [WebInvoke( UriTemplate = "User/{name}", Method = "DELETE", ResponseFormat = WebMessageFormat.Json)] bool DeleteUser(string name); } }
第三步、新建xml服务契约,实现服务的XML序列化传输
using System; using System.ServiceModel; using System.ServiceModel.Web; namespace AndroidHost {
/// /// 演示IStudentXML的接口 /// ///
/// HTTP方法中: /// PUT相当于Create /// GET相当于Read /// POST相当于Update /// DELETE相当于Delete /// 即(Method方式定义了http里面方法的名称) ///
[ServiceContract] public interface IStudentXml {
/// /// 创建学生 /// ///用户名 ///生日 ///
/// WebInvoke - 指示服务操作在逻辑上就是调用操作,而且可由 Web 编程模型调用 /// UriTemplate - 用于服务操作的统一资源标识符 (URI) 模板。URI模板可以将一个 URI 或一组 URI 映射到服务操作。有关 URI 模板的更多信息,请参见 UriTemplate 和 UriTemplateTable /// Method - 与操作关联的协议方法,默认为 POST /// ResponseFormat - 指定从服务操作发出的响应的格式。Xml 或 Json ///
[OperationContract] [WebInvoke( UriTemplate = "User/{name}/{dayOfbirth}", Method = "PUT", ResponseFormat = WebMessageFormat.Xml)] Sutdent CreateUser(string name, string dayOfbirth); /**/ /// /// 获取用户信息 /// ///用户名 ///
/// WebGet - 指示服务操作在逻辑上就是检索操作,而且可由 Web 编程模型调用 ///
[OperationContract] [WebGet( UriTemplate = "User/{name}", ResponseFormat = WebMessageFormat.Xml)] Sutdent GetUser(string name); /**/ /// /// 更新用户信息 /// ///用户名 ///生日 ///
[OperationContract] [WebInvoke(UriTemplate = "User/{name}/{dayOfbirth}", Method = "POST", ResponseFormat = WebMessageFormat.Xml)] bool UpdateUser(string name, string dayOfbirth); /**/ /// /// 删除用户信息 /// ///用户名 ///
[OperationContract] [WebInvoke( UriTemplate = "User/{name}", Method = "DELETE", ResponseFormat = WebMessageFormat.Xml)] bool DeleteUser(string name); } }
第四步、添加服务实现,即student的操作,记住这里同时实现上面的IStudentJson和IStudentXml接口
using System; namespace AndroidHost {
/// /// 实现两种数据结果的方法 /// public class StudentManger : IStudentJson, IStudentXml {
/// /// 创建学生 /// public Sutdent CreateUser(string name, string dayOfbirth) {
return new Sutdent {
Name = "张三", DayOfbirth = System.DateTime.Now }; } /// /// 获取学生 /// public Sutdent GetUser(string name) {
return new Sutdent {
Name = name, DayOfbirth = new DateTime(1980, 2, 14) }; } /// ///更新学生 /// public bool UpdateUser(string name, string dayOfbirth) {
return true; } /// /// 删除学生 /// public bool DeleteUser(string name) {
return true; } } }
第五步、采取自托管的方式发布服务
using System; using System.ServiceModel; namespace AndroidHost {
class Program {
static void Main(string[] args) {
using (ServiceHost host = new ServiceHost(typeof(StudentManger))) {
host.Opened += delegate {
Console.WriteLine("服务已经启动,公开服务地址有:"); }; host.Open(); foreach (var endpoint in host.Description.Endpoints) {
Console.WriteLine(endpoint.Address.ToString()); } Console.WriteLine("按下任何键的时候停止服务..."); Console.ReadKey(); host.Close(); } } } }
至此整个服务我们已经配置完成,运行看结果:

嘿嘿,成功,两种终结点服务已经同时提供,下一片我们实现android客户端的应用操作。。。当然作为json和xml作为webhttp编程模型的传输协议,其具
有的通用性,我们也可以实现ajax或者jquery客户端应用..后面篇幅中介绍。  

转载于:https://www.cnblogs.com/zhijianliutang/archive/2011/11/29/2267792.html

你可能感兴趣的文章
布兰诗歌
查看>>
js编码
查看>>
Pycharm Error loading package list:Status: 403错误解决方法
查看>>
steps/train_sat.sh
查看>>
转:Linux设备树(Device Tree)机制
查看>>
iOS 组件化
查看>>
(转)Tomcat 8 安装和配置、优化
查看>>
(转)Linxu磁盘体系知识介绍及磁盘介绍
查看>>
tkinter布局
查看>>
命令ord
查看>>
Sharepoint 2013搜索服务配置总结(实战)
查看>>
博客盈利请先考虑这七点
查看>>
使用 XMLBeans 进行编程
查看>>
写接口请求类型为get或post的时,参数定义的几种方式,如何用注解(原创)--雷锋...
查看>>
【OpenJ_Bailian - 2287】Tian Ji -- The Horse Racing (贪心)
查看>>
Java网络编程--socket服务器端与客户端讲解
查看>>
List_统计输入数值的各种值
查看>>
学习笔记-KMP算法
查看>>
Timer-triggered memory-to-memory DMA transfer demonstrator
查看>>
跨域问题整理
查看>>