WCF服務(wù)編程中使用SvcMap完成分類共享的技巧方法
發(fā)表時(shí)間:2023-09-14 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]軟件等級(jí):更新時(shí)間:2016-11-21版本號(hào):4.0.8 穿越火線cf官方下載立即下載WCF服務(wù)編程中使用SvcMap實(shí)現(xiàn)類型共享的技巧方法 手動(dòng)的屬性賦值來轉(zhuǎn)換顯然是不可取的,所以就共享類型了。調(diào)用過WCF服務(wù)的同學(xué)可能都會(huì)遇到這樣的問題,同一個(gè)實(shí)體類型,不同的服務(wù)Visual S...
軟件等級(jí):
更新時(shí)間:2016-11-21
版本號(hào):4.0.8
穿越火線cf官方下載
WCF服務(wù)編程中使用SvcMap實(shí)現(xiàn)類型共享的技巧方法
手動(dòng)的屬性賦值來轉(zhuǎn)換顯然是不可取的,所以就共享類型了。調(diào)用過WCF服務(wù)的同學(xué)可能都會(huì)遇到這樣的問題,同一個(gè)實(shí)體類型,不同的服務(wù)Visual Studio生成了不同的版本,例如Service1.User和Service2.User,對(duì)于C#來說,這是兩個(gè)不同的類型,Service1獲得的User是放不到Service2服務(wù)里去的。
方法一、服務(wù)端和客戶端共享數(shù)據(jù)契約程序集
這個(gè)方法最常用,也是大家最熟悉的方法,把WCF的數(shù)據(jù)契約放在一個(gè)獨(dú)立類庫里,服務(wù)端,客戶端都引用這個(gè)程序集,然后在生成WCF時(shí),選擇重新使用引用程序集中的類型即可。
這個(gè)方法缺點(diǎn)很明顯,它只有在客戶端和服務(wù)端在同一個(gè)Visual Studio解決方案內(nèi)才方便,否則要不斷手動(dòng)更新數(shù)據(jù)契約程序集。更不用說是第三方的服務(wù)。
方法二,暴力轉(zhuǎn)換類型
這個(gè)其實(shí)不是類型共享,不過也是解決這個(gè)問題的一種手段。就是借助AutoMapper,EmitMapper這樣的類庫幫助快速轉(zhuǎn)換類型。下面是一個(gè)例子。
Money類型包含User實(shí)體和Currency枚舉和一個(gè)數(shù)字的Amount,Money的定義
[DataContract(Namespace = Consts.Namespace)]
public class Money
{
[DataMember]
public decimal Amount { get; set; }
[DataMember]
public Currency Currency { get; set; }
[DataMember]
public UserInfo User { get; set; }
}
Currency:
[DataContract(Namespace = Consts.Namespace)]
public enum Currency
{
[EnumMember]
Euro,
[EnumMember]
Usd,
[EnumMember]
PoundSterling
}
UserInfo:
[DataContract(Namespace = Consts.Namespace)]
public class UserInfo
{
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public string Email { get; set; }
[DataMember]
public string Phone { get; set; }
[DataMember]
public string Id { get; set; }
}
對(duì)于DepositServiceNoSharp和WithdrawalServiceNoSharp這兩個(gè)WCF服務(wù)版本的Money和User,可以這樣添加一些擴(kuò)展方法
using AutoMapper;
using DepositService = Client.DepositServiceNoSharp;
using Client.WithdrawalServiceNoSharp;
namespace Client
{
public static class Extensions
{
static Extensions()
{
Mapper.CreateMap();
Mapper.CreateMap();
Mapper.CreateMap();
Mapper.CreateMap();
}
public static Money ToWithdrawal(this DepositService.Money money)
{
return Mapper.Map(money);
}
public static DepositService.Money ToDeposit(this Money money)
{
return Mapper.Map(money);
}
}
}
然后就可以輕松轉(zhuǎn)換
var money = new Money
{
Amount = 1,
Currency = Currency.Usd,
User = new UserInfo
{
Email = "zhww@outlook.com",
FirstName = "zhang",
Id = "123",
LastName = "weiwen",
Phone = "110"
}
};
var depositMoney = money.ToDeposit();
方法三、使用SvcMap實(shí)現(xiàn)類型共享
其實(shí)這個(gè)才是文章的重點(diǎn),前面可以忽略。
生成第一個(gè)WCF服務(wù)后,點(diǎn)擊”顯示所有文件“去編輯SvcMap文件:
找到MetadataSources節(jié)點(diǎn),原來只有一個(gè),現(xiàn)在把其他要引用的服務(wù)添加到這里,例如:
再右擊服務(wù),”更新服務(wù)引用“,所有服務(wù)都會(huì)生成到同一個(gè)命名空間里,實(shí)現(xiàn)類型共享。
常見的網(wǎng)絡(luò)操作系統(tǒng)有UNIX、Netware、Windows NT、Linux等,網(wǎng)絡(luò)軟件的漏洞及缺陷被利用,使網(wǎng)絡(luò)遭到入侵和破壞。