<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      REST下的WCF的寄宿方式

        如同SOA下的WCF,REST架構下的WCF也有多種多樣的寄宿方式,如IIS寄宿,自寄宿等等,即使它只有一種協議。
      由于REST基于HTTP協議的特點,所以這種架構下的WCF寄宿時,需要有Web服務器的支持。那么很顯然,微軟肯定會使用
      自己的Web服務器IIS了。
      本節(jié)目錄:
      1、IIS寄宿
      2、控制臺程序寄宿(暫且將它稱為自寄宿)
      當然,REST WCF還有其他的寄宿方式,我這里只挑出典型的兩種給大家介紹。有興趣的朋友不妨試試其他的寄宿方式。
      本節(jié)中所使用的實例還是上節(jié)所使用的例子。Demo結構圖如下:

      結構說明:Client為服務消費者,Contracts定義服務契約、數據契約,Services定義服務的實現,SelfHost、WebHost:自寄宿、IIS寄宿程序宿主程序
      在IIS或者自寄宿中使用同樣的服務契約。服務契約的定義如下:

      [ServiceContract]
      public interface ILog
      {
      [OperationContract]
      [WebGet(UriTemplate = "/")]
      List<LogEntity> GetAll();
      
      [OperationContract]
      [WebGet(UriTemplate = "/Log/{year}/{month}")]
      List<LogEntity> GetMonthLog(string year, string month);
      
      }
      

        

      數據契約定義:

      [DataContract]
      public class LogEntity
      {
      [DataMember]
      public int ID { get; set; }
      
      [DataMember]
      public string EventName { get; set; }
      
      [DataMember]
      public string Level { get; set; }
      
      [DataMember]
      public DateTime Time { get; set; }
      
      }
      

        

      服務的實現代碼:

      #region ILog 成員
      
      public List<LogEntity> GetAll()
      {
      return GetLogEntityList();
      }
      
      public List<LogEntity> GetMonthLog(string year, string month)
      {
      List<LogEntity> logEntities = GetLogEntityList();
      List<LogEntity> logList = new List<LogEntity>();
      logEntities.ForEach(log =>
      {
      if (log.Time.Year.ToString() == year && log.Time.Month.ToString() == month)
      {
      logList.Add(log);
      }
      });
      return logList;
      
      }
      
      #endregion
      

        


      1、IIS寄宿。
      眾所周知Web程序基于HTTP協議,REST也基于HTTP。REST架構認為:WEB很成功、很簡潔,不用那么復雜。所以基于
      IIS的寄宿就很容易理解了。在IIS的寄宿中,我直接建了一個Web項目,然后在WCF 服務文件里面里提供對服務的調用。
      代碼如下:

      public List<LogEntity> GetAll()
      {
      LogServices services = new LogServices();
      return services.GetAll();
      }
      
      public List<LogEntity> GetMonthLog(string year, string month)
      {
      LogServices services = new LogServices();
      return services.GetMonthLog(year, month);
      }
      

        

      這樣就實現了接口規(guī)范中定義的對外提供服務。
      2、控制臺程序寄宿。
      2.1通過編碼實現REST WCF 寄宿。
      寄宿代碼如下:

      static void HostViaCode()
      {
      using (WebServiceHost host = new WebServiceHost(typeof(LogServices)))
      {
      ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(ILog), new WebHttpBinding(),
      "http://127.0.0.1:6688/LogService");
      endpoint.Behaviors.Add(new WebHttpBehavior());
      Console.WriteLine("服務開啟...");
      host.Open();
      Console.ReadLine();
      }
      }
      

        


      2.2、通配置的方式實現REST WCF 寄宿。
      首先在配置文件中進行相關的終結點等等配置。配置文件如下:

      <system.serviceModel>
      <behaviors>
      <serviceBehaviors >
      <behavior name="RESTServiceBehavior"></behavior>
      </serviceBehaviors>
      <endpointBehaviors>
      <behavior name="servierBehavior"></behavior>
      </endpointBehaviors>
      </behaviors>
      
      <services>
      <service name="Services.LogServices" behaviorConfiguration="RESTServiceBehavior">
      <endpoint address="Http://127.0.0.1:8866/LogService" contract="Contracts.ILog" binding="webHttpBinding" behaviorConfiguration="servierBehavior"></endpoint>
      </service>
      </services>
      </system.serviceModel>
      

        

      對WCF SOA 架構有一點了解的同學,一看就明白了,是的,REST架構下采用自寄宿的方式進行寄宿時和SOA中沒有什么不同。
      在這種配置寄宿時的代碼如下:

      using(WebServiceHost host=new WebServiceHost(typeof(LogServices)))
      {
      Console.WriteLine("服務開啟...");
      host.Open();
      Console.ReadLine();
      }
      

        

      這樣就實現了在控制臺程序中對REST WCF服務的寄宿。
      在IE中調用GetAll接口,獲取到的數據如下圖:


      在IE中調用GetMonthLog接口,獲取到的數據如下圖:

      最后,在Client中,調用服務,代碼如下:

      private const string address = "Http://127.0.0.1:8866/LogService";
      
      static void Main(string[] args)
      {
      InvokeRESTService();
      Console.ReadLine();
      }
      
      static void InvokeRESTService()
      {
      HttpWebRequest webRequest = WebRequest.Create(address) as HttpWebRequest;
      webRequest.Method = "GET";
      HttpWebResponse webResponse = webRequest.GetResponse() as HttpWebResponse;
      using (StreamReader reader=new StreamReader(webResponse.GetResponseStream()) )
      {
      Console.WriteLine(string.Format("獲取的調用結果為:{0}",reader.ReadToEnd())); 
      }
      }
      

        


      不管是IIS寄宿,還是自寄宿,不同的寄宿方式下,客戶單調用結果如下圖:

      提示,通過配置的方式寄宿REST WCF 服務,雖然在服務端程序啟動時,也會有一個Asp.Net Development Server
      啟動,但是它對客戶端對服務的調用沒有影響。我們可以看到,服務端在啟動后,如果關閉Asp.Net Development Server,
      客戶端對服務的調用依然是成功的。

      以上分別是 REST WCF在IIS與控制臺程序下的寄宿方式。同樣地它一定也能在其他程序:如Windows Service程序,Winform程序中實現寄宿。
      另外,我對前三節(jié)中契約的定義有個小的變動,就是在[WebGet(UriTemplate = "/Log/{year}/{month}")]中用Log替換了Get,這樣能更清晰地
      表述REST思想。

       

      posted @ 2011-10-28 15:50  tyb1222  閱讀(3177)  評論(7)    收藏  舉報
      主站蜘蛛池模板: 国产精品一区二区三区自拍| 欧美一区二区三区成人久久片| 国产美女久久久亚洲综合| 开心色怡人综合网站| 色综合色综合综合综合综合| 99精品国产在热久久婷婷| 老司机性色福利精品视频| 亚洲精品一区二区三区蜜臀| 国产午夜三级一区二区三| 久久精品无码免费不卡| 国产乱xxxxx97国语对白| 骚虎三级在线免费播放| √天堂中文www官网在线| 久久96热在精品国产高清| 性色在线视频精品| 精品人妻少妇嫩草av系列| 好紧好爽午夜视频| 一区三区在线专区在线| 99久久无码私人网站| 欧美深度肠交惨叫| 午夜福利国产精品视频| 国产精品日韩av在线播放| 亚洲av肉欲一区二区| 少妇被多人c夜夜爽爽av| 欧美亚洲精品中文字幕乱码 | 精品福利视频一区二区三区| 久久亚洲日本激情战少妇| 久久99精品久久久久久9| 屁屁影院ccyy备用地址| 9久9久热精品视频在线观看| 无码日韩精品一区二区三区免费| 乌克兰美女浓毛bbw| 久久精品一区二区三区av| 国产91丝袜在线观看| 久久免费观看归女高潮特黄| 熟妇好大好深好满好爽| 午夜好爽好舒服免费视频| 国产真实乱对白精彩久久老熟妇女| 人妻另类 专区 欧美 制服| 亚洲中文字幕国产精品| 131mm少妇做爰视频|