一步一個腳印學習WCF系列之WCF概要—WCF服務的創建與調用HelloWorld實例,通過配置文件方式(六)

  閱讀目錄

  一:前言

  二:配置工作

  三:通過元數據生成代理和配置文件

  一:前言

    . 這篇文章是與《一步一個腳印學習WCF之WCF概要—WCF服務的創建與調用HelloWorld實例,通過編碼方式(四) 》一文相對比寫的,如果其中有不明白的情參照鏈接文章。

  二:配置工作

    . 在Host工程裏面爲我們的Host這一端添加了一些配置,這個配置有兩個方面,一個是方面關於Service的配置,也就是我們我們這個Host裏面加載的Service的配置。另外一個方面是關於Host裏面某些特定Service行爲的配置。

    在Host這一端我們來看配置文件

     

    1:Service的配置

      <service/>節點

       1.1:在<services/>裏我們添加了一個<service/>,這個service的名稱就是我們前面實現的服務的名稱,格式name="HelloWorldService.HelloWorldService",就是我們的命名空間+具體實現服務的名稱。behaviorConfiguration="serviceBehavior",表示它服務的行爲配置採用serviceBehavior這個策略 

1 <service name="HelloWorldService.HelloWorldService" behaviorConfiguration="serviceBehavior">

      1.2:我們看到暴露出了兩個端點出來,這兩個端點都是綁定Http協議,但是還是有區別的,上面的端點採用基本的Http進行綁定,下面的端點使用mexHttp進行綁定,這個mex是WCF裏用於元數據交互的一種特有方式,在我們進行元數據交換的時候,指定了由WCF內建的一個接口”IMetadataExchange“,這個接口的主要作用就是來完成元數據的交換,並且在後面指定了這個端點具體的地址“mex”。上面的基於“basicHttpBinding”的端點它所綁定的契約就是在《一步一個腳印學習WCF之WCF概要—WCF服務的創建與調用HelloWorld實例,通過編碼方式(四)》一文中的HelloWorldService.IHelloWorldService這個契約

1 <endpoint address="HelloWorldService" binding="basicHttpBinding" contract="HelloWorldService.IHelloWorldService" />
2 <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

      1.3:在<endpoint/>這個節點描述完畢以後,然後就是<Host/>節點,這個service 它所運行在的Host,在Host裏面主要描述了一個基本的地址就是“http://localhost:8000”,所以對於“HelloWorldService”這個服務真實的地址是“http://localhost:8000/HelloWorldService”,那麼一樣元數據交換的地址是“http://localhost:8000/mex”,到這裏就完成了對Service的配置工作

1 <host>
2     <baseAddresses>
3        <add baseAddress="http://localhost:8000"/>
4      </baseAddresses>
5 </host>

    2:Service行爲的配置

      <behaviors/>

      在<behaviors/>裏我們可以指定服務具體的行爲,<serviceMetadata httpGetBinding="true"/>是說服務的元數據是否能用Http協議Get出來,也就是說當我們應用了這個配置選項以後,元數據我們是允許Get方法操作的

1 <behaviors>
2  <serviceBehaviors>
3       <behavior name="serviceBehavior">
4         <serviceMetadata httpGetBinding="true"/>
5       </behavior>
6     </serviceBehaviors>
7 </behaviors>

  三:通過元數據生成代理和配置文件

    . 我們保存我們在Host這端的配置文件,下面我們啓動Host,由於剛纔我們在配置文件中已經指明瞭使用Http協議這麼一個服務以及8000它相應的端口,因此在瀏覽器我們可以通過輸入http://localhost:8000/來看到和這個服務相關的具體內容如圖一,我們可以使用svcutil.exe這個工具,單擊http://localhost:8000/?WSDL看到具體的描述信息在客戶端生成相應的Proxyl代碼,對個這個WSDL配置文件當中,我們可以看到我們指定的一些信息,像我們使用什麼樣的協議進行傳遞等這些信息都在WSDL裏面進行了非常詳細的描述如圖二,我們已在Host這一端添加了相應的配置文件使得Host不但能夠對外提供基於Tcp協議位置在localhost端口在9000下的服務如圖三,同時也提供基於Http協議位置在localhost端口在8000下的服務,那麼我們對比這兩個服務的話,通過寫代碼所作的這些事情事實上我們可以通過配置文件的方式來完成,這也就意味着我們在Host這一端希望對外提供一個服務的時候其實對於這個服務而言是不需要編寫任何的代碼,我們需要做的是在配置文件當中來完成對這個服務的配置就夠了。
    . 演示在客戶端如何使用在Http協議下提供的這個服務,我們先啓動Host,我們進入到Client工程當中,在Client裏面添加一個引用,地址是http://localhost:8000/如圖四,也就是提供基於Http協議消息的Host,由Visual Studio會根據WSDL裏面的內容l來自動生成相應的代理文件以及相應的配置文件如圖五。在Reference.svcmap下面有個Reference.cs,在這個Reference.cs裏面有由系統自動爲我們生成的代理類,在我們進行使用的時候,我們直接使用代理類來進行服務的操作。同樣在Client端生成了和Host端相關的的相應的配置文件以及裏面的配置信息和配置參數,對於這些參數可以根據我們具體需求來進行具體的配置如圖六。現在我們轉到Client端由於說系統已經爲我們生成好了和這個IHelloWorldService契約相關的Proxyl代碼了,因此我們自己手動的代碼就不需要了,然後對於Proxyl的使用我們就不需要對通過CreateChannel這種方式來進行調用,我們可以直接Proxy.HelloWorldServiceContractClient proxy = new Proxy.HelloWorldServiceContractClient();通過實例化對象的方式來實例化一個新的Proxyl對象出來就可以了,那我
們實例化出來的這個proxyl這個對象就自動包含了契約相關的信息,在Proxyl生成以後我可以調用相應的方法來完成相應的任務,這樣就實現了基於Http協議的分佈式調用。在WCF當中無論是我們使用基於http協議的消息的傳遞還是使用基於Tcp協議的消息傳遞都是遵循同一個模型來開發的,如果說我們開發了一個複雜系統在原來是使用Tcp協議來進行數據傳遞的,然而在實際部署過程中要改變成Http協議,那麼我們可以通過配置的方式修改一些參數就能夠項目從使用Tcp協議移植到使用Http協議上面

  

  

                        圖一

  

                             圖二

  

 

                             圖三

   

                  圖四

  

          圖五

  

                      圖六

    1:首先啓動Host端  

  2:然後啓動Client端

  是不和《一步一個腳印學習WCF之WCF概要—WCF服務的創建與調用HelloWorld實例,通過編碼方式(四) 》一文中通過編碼方式的效果一樣

  

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章