二:生成RSET 風(fēng)格的Web Service
為什么需要Web Service,主要是考慮復(fù)用,緩存,數(shù)據(jù)之間的EVENT通知,還有調(diào)試維護(hù)等,至于為什么要生成REST風(fēng)格的,不明白的請自覺GG之,當(dāng)然,不是每個方法的實現(xiàn)都用REST風(fēng)格的,對于安全級別比較高的,我還是會使用傳統(tǒng)的生成的wsdl web service去安排設(shè)計。這里這些暫時不會考慮。
新建一個wcf 應(yīng)用程序WcfService,創(chuàng)建一個wcf服務(wù)Member.svc,范例中只實現(xiàn)了對會員的簡單查詢和錄入:先看看IMember的實現(xiàn):
namespace WcfService { // 注意: 如果更改此處的接口名稱 "IMember",也必須更新 Web.config 中對 "IMember" 的引用。 [ServiceContract] public interface IMember { [OperationContract] [WebGet(UriTemplate = "User/{id}", ResponseFormat = WebMessageFormat.Json)] User GetUser(string id); [OperationContract] [WebInvoke(UriTemplate = "User/{name}/{password}", ResponseFormat = WebMessageFormat.Xml,Method = "POST")] int AddUser(string name,string password);
} }
注意第一行標(biāo)注[ServiceContract]這是一個可轉(zhuǎn)換的Service,3.5大部分是這種模式,接下來是[OperationContract]操作方法,相當(dāng)于asmx的類似于webmethod的這種標(biāo)注,然后[WebGet(UriTemplate = "User/{id}", ResponseFormat = WebMessageFormat.Json)]這就是表示訪問路徑與相應(yīng)的格式。我們期望在應(yīng)用程序訪問http://localhost/member.svc/User/1,能相應(yīng)Json格式的User數(shù)據(jù)。這里的User我并沒有數(shù)據(jù)的Member,因為敏感數(shù)據(jù)控制,緩存等考慮,中間做了一層,專用跨平臺交互:
[DataContract] public class User { [DataMember] public int Id { get; set; } [DataMember] public string Name{ get; set; }
}
在dlinq查詢是非常的方便的,例如看看具體的實現(xiàn):
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class Member : IMember { public User GetUser(string id) { DbDomain.TestDbHandlerDataContext dc=new DbDomain.TestDbHandlerDataContext(); return (from x in dc.Member where x.Id.ToString().Equals(id) select new User { Id = x.Id, Name = x.Name }).FirstOrDefault(); } public int AddUser(string name, string password) { if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(password)) return -1; DbDomain.TestDbHandlerDataContext dc = new DbDomain.TestDbHandlerDataContext(); DbDomain.Member clsMember = new DbDomain.Member(); clsMember.Name = name; clsMember.Password = password; dc.Member.InsertOnSubmit(clsMember); dc.SubmitChanges(); return clsMember.Id; }
}
注意第一句話 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]標(biāo)注,是指明在IIS里訪問該service。這里我沒有做cache等,是直接操作數(shù)據(jù)庫的,dlinq操作數(shù)據(jù)之前,都會建立一個 DbDomain.TestDbHandlerDataContext dc = new DbDomain.TestDbHandlerDataContext();查詢類。查詢和更新都需要,語法也是很規(guī)范的linq,完全不會出現(xiàn)native sql或者dataset這些東西,全部是模型對象的處理,話外DataContext注意每次使用new的,不要使用static的。
注意,如果要讓你的svc是REST風(fēng)格的,除了上面的UriTemplate以外,還要修改svc的標(biāo)注,加上這句:
Factory="System.ServiceModel.Activation.WebServiceHostFactory"
修改web.Config,注意<system.serviceModel>節(jié)點上加這句:
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
在
<behaviors> <endpointBehaviors> <behavior name="RestMemberServiceBehavior"> <webHttp /> </behavior> </endpointBehaviors>
注意加紅變粗的地方。差不多就注意這幾個地方,具體看我范例的配置吧。
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁 C# 3.5 WCF REST架構(gòu)簡單網(wǎng)站 [1] 下一頁 C# 3.5 WCF REST架構(gòu)簡單網(wǎng)站 [3]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|