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

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

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

      對(duì)REST架構(gòu) 風(fēng)格下WCF的一點(diǎn)補(bǔ)充

        這幾天思考REST 架構(gòu)下POST復(fù)雜數(shù)據(jù)類型的問(wèn)題查了寫資料,以及通過(guò)與WCF 大牛------Frank Xulei進(jìn)行了一番交流對(duì)REST有了一些進(jìn)一步的認(rèn)識(shí)。本篇作為:1、REST與SOA兩種架構(gòu)下WCF的異同比較   2、通過(guò)HTTP協(xié)議標(biāo)準(zhǔn)動(dòng)作使用REST WCF 服務(wù) 這兩篇的一個(gè)補(bǔ)充。
        起因是這樣的:在SOA架構(gòu)下,一般都是通過(guò)定義服務(wù)契約的方式最終通過(guò)WSDL將元數(shù)據(jù)對(duì)外發(fā)布,以供調(diào)用者使用。也就是說(shuō)在SOA中,通過(guò)服務(wù)契約定義向外公布服務(wù)對(duì)外提供的操作。如果先學(xué)習(xí)SOA,然后接觸REST,可能會(huì)在使用REST的時(shí)候會(huì)沿用SOA下的一些習(xí)慣。我在進(jìn)行REST架構(gòu)下的WCF學(xué)習(xí)過(guò)程中也是沿用了這一思路:先定義服務(wù)接口,然后實(shí)現(xiàn)服務(wù)供消費(fèi)者使用。
        后來(lái)仔細(xì)想了想REST架構(gòu)的原則,通過(guò)定義契約接口的方式固然可行,并且在前幾節(jié)中也做了實(shí)現(xiàn)的說(shuō)明。但真的有必要這樣做嗎。?
        由于REST架構(gòu)下的服務(wù)通過(guò)公共的連接器接口(主要是指GET,POST,PUT,DELETE)對(duì)服務(wù)進(jìn)行訪問(wèn)。客戶端只需知道服務(wù)的統(tǒng)一資源標(biāo)識(shí)---URI(Uniform Resources Identifier)以及相應(yīng)的HTTP動(dòng)作就行了(可以通過(guò)REST 架構(gòu)下的幫助頁(yè)面,即HTTP://ServiceAddress/help就能知道各個(gè)服務(wù)如何使用)。因此在REST架構(gòu)下,WCF服務(wù)無(wú)需向客戶端暴露元數(shù)據(jù)信息。這也是REST架構(gòu)下,WCF不需要定義服務(wù)契約的原因。由于沒(méi)有元數(shù)據(jù)信息,因此REST WCF服務(wù)也不能通過(guò)添加引用的方式使用。
        小結(jié):
          1、REST 架構(gòu)下無(wú)需給服務(wù)定義服務(wù)契約(非必須,若定義也行)。
          2、REST 架構(gòu)下的服務(wù)不能添加引用的方式使用。


        在面向?qū)ο笳Z(yǔ)言中,操作一般都針對(duì)對(duì)象而言。REST中如何POST自定義類型。?下面說(shuō)說(shuō)REST架構(gòu)下,復(fù)雜數(shù)據(jù)類型的POST操作。(代碼下載
      服務(wù)的實(shí)現(xiàn):

      [OperationContract]
      [WebInvoke(UriTemplate = "Person/Post")]
      public string Post(Person person)
      {
      return person.Name + person.Tel;
      }


      調(diào)用方式如下:

      static void InvokeMutiType()
      {
        using (MemoryStream ms = new MemoryStream())
        {
          WebClient webClient = new WebClient();
          Person person = new Person { Name = "tyb", Tel = "01021234568" };
          XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person));
          xmlSerializer.Serialize(ms, person);
          ms.Seek(0, SeekOrigin.Begin);

          XmlDocument xmlDocument = new XmlDocument();
          xmlDocument.Load(ms);
          webClient.Headers[HttpRequestHeader.ContentType] = "application/xml";
        try
        {
          string str = webClient.UploadString("http://localhost:6012/RestService.svc/Person/Post", "POST"  , xmlDocument.InnerXml);
          Console.WriteLine("接收到的數(shù)據(jù)為:{0}", str);
        }
        catch (WebException exception)
        {
        Console.WriteLine(exception.Status);
        }
       }
      }

       

      調(diào)用結(jié)果如下圖:


      由上可知:對(duì)自定義類型數(shù)據(jù)采用POST操作時(shí),需要通過(guò)序列話然后發(fā)送給服務(wù)端。服務(wù)端在接受到數(shù)據(jù)后能自動(dòng)映射到自定義類型上。
      以上通過(guò)WebClient發(fā)送的,也可以通過(guò)HttpWebRequest與HttpWebResponse來(lái)實(shí)現(xiàn)。

      posted @ 2011-11-09 20:47  tyb1222  閱讀(1865)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产区图片区小说区亚洲区| 乱人伦无码中文视频在线| 免费无码黄动漫在线观看| 九九热视频在线观看一区| 国内自拍视频一区二区三区| 饥渴少妇高潮正在播放| 日本午夜精品一区二区三区电影| 日韩中文字幕在线不卡一区| 亚洲国产色一区二区三区| 久久精品国产免费观看频道| 四虎成人在线观看免费| 国产无遮挡裸体免费久久| 亚洲永久视频| 午夜免费福利小电影| 4480yy亚洲午夜私人影院剧情| 国产成人精品无码免费看| 曲靖市| 高清美女视频一区二区三区| 熟妇人妻久久精品一区二区| 少妇被粗大的猛烈进出69影院一 | 日本边添边摸边做边爱| 日韩在线视频线观看一区| 精品无码日韩国产不卡av | 中文字幕乱码十国产乱码| 搡bbbb搡bbb搡| 男女xx00上下抽搐动态图| 中文国产不卡一区二区| 丰满少妇69激情啪啪无| 久久久久香蕉国产线看观看伊 | 免费国产一区二区不卡| 亚洲国产精品人人做人人爱| 高清无打码一区二区三区| 青草成人精品视频在线看| 亚洲全网成人资源在线观看| 在线无码免费的毛片视频| 国产99精品成人午夜在线| 999福利激情视频| 国产日韩精品欧美一区灰| 国产高清国产精品国产专区| 中文字幕在线视频不卡一区二区| 中文字幕有码无码AV|