日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

WCF完美搭建android平台服务之一

發(fā)布時(shí)間:2025/3/19 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WCF完美搭建android平台服务之一 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

???? 由于android系統(tǒng)的特殊性,對于wcf的平臺服務(wù)的搭建就帶來特殊要求,在這兩種平臺應(yīng)用上數(shù)據(jù)的通用性而講,能實(shí)現(xiàn)其信息的傳遞,我們可以采用JSON/XML兩種數(shù)據(jù)數(shù)據(jù)格式傳遞,在wcf服務(wù)的搭建的時(shí)候我們就需要將數(shù)據(jù)序列化成這兩種類型。

??? 在查閱MSDN中我們找到了,這兩種數(shù)據(jù)格式的數(shù)據(jù)契約進(jìn)行了定義,詳細(xì)參照:具有 JSON 和 XML 的 AJAX 服務(wù)示例

我們使用webHttpEndpoint配置終結(jié)點(diǎn),在WebHttpEndPoint的默認(rèn)數(shù)據(jù)格式為xml,而WebScripEndpoint的默認(rèn)格式為JSON,一般在定義數(shù)據(jù)格式的時(shí)候我們采用WebGetAttribute或者WebInvokedAttribute屬性(后者可以指定客戶端訪問模式get/post),這樣樣式特定于webhttp行為,對其JSON/Xml數(shù)據(jù)格式進(jìn)行設(shè)置

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

另一個(gè)操作使用 WebInvokeAttribute 屬性并顯式指定響應(yīng)的 JSON(而不是 XML)。

OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
MathResult DoMathJson(double n1, double n2); 請注意,在這兩種情況下,操作均返回一個(gè)復(fù)雜類型 MathResult,該類型是一個(gè)標(biāo)準(zhǔn)的 WCF 數(shù)據(jù)協(xié)定類型。 其實(shí)這兩種數(shù)據(jù)格式的創(chuàng)建使用用于ajax客戶端或者jquery使用,因?yàn)槠鋽?shù)據(jù)格式被序列成JSON或者XML,這兩者同樣的適合于android平臺使用,所以 我們應(yīng)用這兩種數(shù)據(jù)格式為android平臺提供服務(wù),這里有幾個(gè)點(diǎn)需要注意: ?1、當(dāng)客戶端我們需應(yīng)用JSON數(shù)據(jù)格式的時(shí)候,我們必須顯示的將 ResponseFormat(或 ResponseFormat)屬性設(shè)置為 Json。 2、當(dāng)開啟客戶端數(shù)據(jù)回傳方式的時(shí)候我們?nèi)绻枰付?#xff0c;我們需要WebInvoke設(shè)置其方式:?[WebInvoke(Method = "GET"] 下面通過一個(gè)案例綜合來實(shí)現(xiàn)我們測操作: 第一步,新建數(shù)據(jù)實(shí)體,記住添加引用(using System.Runtime.Serialization)和(using System.ServiceModel) using System;
using System.Runtime.Remoting;
using System.Runtime.Serialization; //實(shí)現(xiàn)數(shù)據(jù)序列化

namespace AndroidHost
{
//// <summary>
/// Suident實(shí)體類
///</summary>
[DataContract]
public class Sutdent
{
//// <summary>
/// 用戶名
///</summary>
[DataMember(Order = 0)]
public string Name { get; set; }
///<summary>
/// 生日
///</summary>
[DataMember(Order = 1)]
public DateTime DayOfbirth { get; set; }

}
} 第二步、新建json的服務(wù)契約,注釋很詳細(xì) using System;
using System.ServiceModel;
using System.ServiceModel.Web;

namespace AndroidHost
{
///<summary>
/// 演示IStudentJson的接口
///</summary>
///<remarks>
/// HTTP方法中:
/// PUT相當(dāng)于Create
/// GET相當(dāng)于Read
/// POST相當(dāng)于Update
/// DELETE相當(dāng)于Delete
/// 即(Method方式定義了http里面方法的名稱)
///</remarks>
[ServiceContract]
public interface IStudentJson
{
///<summary>
/// 創(chuàng)建學(xué)生
///</summary>
///<param name="name">用戶名</param>
///<param name="dayOfbirth">生日</param>
///<remarks>
/// WebInvoke - 指示服務(wù)操作在邏輯上就是調(diào)用操作,而且可由 Web 編程模型調(diào)用
/// UriTemplate - 用于服務(wù)操作的統(tǒng)一資源標(biāo)識符 (URI) 模板。URI模板可以將一個(gè) URI 或一組 URI 映射到服務(wù)操作。有關(guān) URI 模板的更多信息,請參見 UriTemplate 和 UriTemplateTable
/// Method - 與操作關(guān)聯(lián)的協(xié)議方法,默認(rèn)為 POST
/// ResponseFormat - 指定從服務(wù)操作發(fā)出的響應(yīng)的格式。Xml 或 Json
/// BodyStyle-指定body里面的封裝
///</remarks>
[OperationContract]
[WebInvoke(
UriTemplate = "User/{name}/{dayOfbirth}",
Method = "PUT",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare
)]
Sutdent CreateUser(string name, string dayOfbirth);

///<summary>
/// 獲取用戶信息
///</summary>
///<param name="name">用戶名</param>
///<remarks>
/// WebGet - 指示服務(wù)操作在邏輯上就是檢索操作,而且可由 Web 編程模型調(diào)用
///</remarks>
[OperationContract]
[WebGet(
UriTemplate = "User/{name}",
ResponseFormat = WebMessageFormat.Json)]
Sutdent GetUser(string name);


///<summary>
/// 更新用戶信息
///</summary>
///<param name="name">用戶名</param>
///<param name="dayOfbirth">生日</param>
///<returns></returns>
[OperationContract]
[WebInvoke(UriTemplate = "User/{name}/{dayOfbirth}",
Method = "POST",
ResponseFormat = WebMessageFormat.Json)]
bool UpdateUser(string name, string dayOfbirth);
///<summary>
/// 刪除用戶信息
///</summary>
///<param name="name">用戶名</param>
///<returns></returns>
[OperationContract]
[WebInvoke(
UriTemplate = "User/{name}",
Method = "DELETE",
ResponseFormat = WebMessageFormat.Json)]
bool DeleteUser(string name);

}
} 第三步、新建xml服務(wù)契約,實(shí)現(xiàn)服務(wù)的XML序列化傳輸 using System;
using System.ServiceModel;
using System.ServiceModel.Web;


namespace AndroidHost
{
///<summary>
/// 演示IStudentXML的接口
///</summary>
///<remarks>
/// HTTP方法中:
/// PUT相當(dāng)于Create
/// GET相當(dāng)于Read
/// POST相當(dāng)于Update
/// DELETE相當(dāng)于Delete
/// 即(Method方式定義了http里面方法的名稱)
///</remarks>
[ServiceContract]
public interface IStudentXml
{
///<summary>
/// 創(chuàng)建學(xué)生
///</summary>
///<param name="name">用戶名</param>
///<param name="dayOfbirth">生日</param>
///<remarks>
/// WebInvoke - 指示服務(wù)操作在邏輯上就是調(diào)用操作,而且可由 Web 編程模型調(diào)用
/// UriTemplate - 用于服務(wù)操作的統(tǒng)一資源標(biāo)識符 (URI) 模板。URI模板可以將一個(gè) URI 或一組 URI 映射到服務(wù)操作。有關(guān) URI 模板的更多信息,請參見 UriTemplate 和 UriTemplateTable
/// Method - 與操作關(guān)聯(lián)的協(xié)議方法,默認(rèn)為 POST
/// ResponseFormat - 指定從服務(wù)操作發(fā)出的響應(yīng)的格式。Xml 或 Json
///</remarks>
[OperationContract]
[WebInvoke(
UriTemplate = "User/{name}/{dayOfbirth}",
Method = "PUT",
ResponseFormat = WebMessageFormat.Xml)]
Sutdent CreateUser(string name, string dayOfbirth);

/**/
///<summary>
/// 獲取用戶信息
///</summary>
///<param name="name">用戶名</param>
///<remarks>
/// WebGet - 指示服務(wù)操作在邏輯上就是檢索操作,而且可由 Web 編程模型調(diào)用
///</remarks>
[OperationContract]
[WebGet(
UriTemplate = "User/{name}",
ResponseFormat = WebMessageFormat.Xml)]
Sutdent GetUser(string name);

/**/
///<summary>
/// 更新用戶信息
///</summary>
///<param name="name">用戶名</param>
///<param name="dayOfbirth">生日</param>
///<returns></returns>
[OperationContract]
[WebInvoke(UriTemplate = "User/{name}/{dayOfbirth}",
Method = "POST",
ResponseFormat = WebMessageFormat.Xml)]
bool UpdateUser(string name, string dayOfbirth);

/**/
///<summary>
/// 刪除用戶信息
///</summary>
///<param name="name">用戶名</param>
///<returns></returns>
[OperationContract]
[WebInvoke(
UriTemplate = "User/{name}",
Method = "DELETE",
ResponseFormat = WebMessageFormat.Xml)]
bool DeleteUser(string name);

}
} 第四步、添加服務(wù)實(shí)現(xiàn),即student的操作,記住這里同時(shí)實(shí)現(xiàn)上面的IStudentJson和IStudentXml接口 using System;
namespace AndroidHost
{
///<summary>
/// 實(shí)現(xiàn)兩種數(shù)據(jù)結(jié)果的方法
///</summary>
public class StudentManger : IStudentJson, IStudentXml
{
///<summary>
/// 創(chuàng)建學(xué)生
///</summary>
public Sutdent CreateUser(string name, string dayOfbirth)
{
return new Sutdent
{
Name = "張三",
DayOfbirth = System.DateTime.Now
};
}
///<summary>
/// 獲取學(xué)生
///</summary>
public Sutdent GetUser(string name)
{
return new Sutdent
{
Name = name,
DayOfbirth = new DateTime(1980, 2, 14)
};
}

///<summary>
///更新學(xué)生
///</summary>
public bool UpdateUser(string name, string dayOfbirth)
{
return true;
}
///<summary>
/// 刪除學(xué)生
///</summary>
public bool DeleteUser(string name)
{
return true;
}
}
} 第五步、采取自托管的方式發(fā)布服務(wù) 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("服務(wù)已經(jīng)啟動(dòng),公開服務(wù)地址有:");
};
host.Open();
foreach (var endpoint in host.Description.Endpoints)
{
Console.WriteLine(endpoint.Address.ToString());
}
Console.WriteLine("按下任何鍵的時(shí)候停止服務(wù)...");
Console.ReadKey();
host.Close();
}
}
}
} 至此整個(gè)服務(wù)我們已經(jīng)配置完成,運(yùn)行看結(jié)果:

嘿嘿,成功,兩種終結(jié)點(diǎn)服務(wù)已經(jīng)同時(shí)提供,下一片我們實(shí)現(xiàn)android客戶端的應(yīng)用操作。。。當(dāng)然作為json和xml作為webhttp編程模型的傳輸協(xié)議,其具 有的通用性,我們也可以實(shí)現(xiàn)ajax或者jquery客戶端應(yīng)用..后面篇幅中介紹。

總結(jié)

以上是生活随笔為你收集整理的WCF完美搭建android平台服务之一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。