日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

      首頁編程開發(fā)其它知識 → WCF服務(wù)編程中使用SvcMap實現(xiàn)類型共享等技巧

      WCF服務(wù)編程中使用SvcMap實現(xiàn)類型共享等技巧

      相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2013/1/18 8:38:07字體大。A-A+

      作者:西西點擊:1次評論:0次標簽: WCF

      • 類型:源碼相關(guān)大。79KB語言:中文 評分:5.0
      • 標簽:
      立即下載

      調(diào)用過WCF服務(wù)的同學(xué)可能都會遇到這樣的問題,同一個實體類型,不同的服務(wù)Visual Studio生成了不同的版本,例如Service1.User和Service2.User,對于C#來說,這是兩個不同的類型,Service1獲得的User是放不到Service2服務(wù)里去的。手動的屬性賦值來轉(zhuǎn)換顯然是不可取的,所以就共享類型了。

      方法一、服務(wù)端和客戶端共享數(shù)據(jù)契約程序集

      這個方法最常用,也是大家最熟悉的方法,把WCF的數(shù)據(jù)契約放在一個獨立類庫里,服務(wù)端,客戶端都引用這個程序集,然后在生成WCF時,選擇重新使用引用程序集中的類型即可。

      這個方法缺點很明顯,它只有在客戶端和服務(wù)端在同一個Visual Studio解決方案內(nèi)才方便,否則要不斷手動更新數(shù)據(jù)契約程序集。更不用說是第三方的服務(wù)。

      方法二,暴力轉(zhuǎn)換類型

      這個其實不是類型共享,不過也是解決這個問題的一種手段。就是借助AutoMapper,EmitMapper這樣的類庫幫助快速轉(zhuǎn)換類型。下面是一個例子。

      Money類型包含User實體和Currency枚舉和一個數(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; }
      }

      對于DepositServiceNoSharp和WithdrawalServiceNoSharp這兩個WCF服務(wù)版本的Money和User,可以這樣添加一些擴展方法

      using AutoMapper;
      using DepositService = Client.DepositServiceNoSharp;
      using Client.WithdrawalServiceNoSharp;
      
      namespace Client
      {
          public static class Extensions
          {
              static Extensions()
              {
                  Mapper.CreateMap<DepositService.Money, Money>();
                  Mapper.CreateMap<Money, DepositService.Money>();
                  Mapper.CreateMap<DepositService.UserInfo, UserInfo>();
                  Mapper.CreateMap<UserInfo, DepositService.UserInfo>();
              }
      
              public static Money ToWithdrawal(this DepositService.Money money)
              {
                  return Mapper.Map<DepositService.Money, Money>(money);
              }
      
              public static DepositService.Money ToDeposit(this Money money)
              {
                  return Mapper.Map<Money, DepositService.Money>(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實現(xiàn)類型共享

      其實這個才是文章的重點,前面可以忽略。

      生成第一個WCF服務(wù)后,點擊”顯示所有文件“去編輯SvcMap文件:

      找到MetadataSources節(jié)點,原來只有一個,現(xiàn)在把其他要引用的服務(wù)添加到這里,例如:

        <MetadataSources>
          <MetadataSource Address="http://localhost:34875/DepositService.svc" Protocol="http" SourceId="1" />
          <MetadataSource Address="http://localhost:34875/WithdrawalService.svc" Protocol="http" SourceId="2" />
        </MetadataSources>
      

      再右擊服務(wù),”更新服務(wù)引用“,所有服務(wù)都會生成到同一個命名空間里,實現(xiàn)類型共享。

        相關(guān)評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
        推薦文章

        沒有數(shù)據(jù)