WCF Service Configuration Editor的使用

問題:瀏覽器

  使用WCF Service Configuration Editor工具生成XML文件來進行WCF的配置,而不是在CS文件中敲代碼。app

解決過程:工具

要取代上篇文章中HostApp.cs文件裏的幾行配置代碼,使用工具配置步驟以下:spa

  1. 打開VS,在Host項目中右鍵,新建一個App.config文件。
  2. 點擊菜單欄Tools選項,在下拉菜單中選擇WCF Service Configuration Editor。
  3. 在彈出的工具窗口中選擇「File->open->Config File」。找到剛纔建的App.config文件,並打開。
  4. 新建一個服務,以下圖所示,先點擊「建立新的服務」連接,再找到Service項目中的Services.Helloworld服務。

  5. 點擊下一步,找到Contracts項目中的IHello契約。

  6. 下一步,選擇Http的通訊方式。

  7. 點擊下一步,選擇Basic Web Service Interoperability。(這 步忘截圖了,Sorry!)
  8. 點擊下一步,輸入服務端Endpoint地址,這個咱們先不填,待會兒再配置host上填。(爲何這麼作,待會在原理部分會有講到)。下一步Finish。
  9. 爲服務添加行爲(Behavior),這步很重要。在Advanced目錄下,右鍵新建一個Service行爲,NewBehavior。在它上右鍵,添加服務元數據的擴展。而後對行爲重命名爲HelloWorldBehavior,並設置HttpGetEnabled爲true。以下圖所示:

  10. 這些作好了以後,咱們回到最上面的Service目錄,爲HelloWorld服務添加剛纔配的HelloWorldBehavior行爲配置。以下圖所示:

  11. 接着配置Host的地址,選中Host,而後點擊右下方的New Base Address,輸入http://localhost:8080/HelloService

  12. 能夠新添加一個服務端的Endpoint,用於配置WS-MetadataExchange,固然也能夠不加。在Services目錄下的Endpoint右鍵,新建一個Endpoint,名字和地址隨意,保證Binding是mexHttpBinding。

     

  13. Ctrl+S保存,這樣App.config文件就自動寫滿了,以下:

原理:code

  這個,工具生成XML的原理,我還真講不出來,大標籤套小標籤的它都先作好了,你只要往裏面填如參數就行。不過前面有個地址沒有填,有必要提一下。在上面的XML文件中你會發現有這麼一段:xml

<endpoint address="" binding="basicHttpBinding" name="Hello"   Contract="Contracts.IHello" listenUriMode="Explict"/>
  <host>
      <baseAddress>
          <add baseAddress="http://localhost:8080/HelloService"/>
      </baseAddress>
</host>

 

    endpiont的地址爲空,只是配了Host的基地址。固然也能夠直接配Endpoint的地址,不配Host的基地址。但若是host了多個服務呢?有多了Endpoint掛在同一個host下,那麼配基地址就顯得很重要。從其餘地方找的一個例子,代碼以下:blog

      <service name="Wcf.Services.MallService" behaviorConfiguration="MallServiceBehaviors" >      
        <endpoint  address="" contract="Wcf.Contract.IUserService" binding="basicHttpBinding"></endpoint>
        <endpoint  address="" contract="Wcf.Contract.IOrderService" binding="basicHttpBinding"></endpoint>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8899/MallService%22/>
          </baseAddresses>
        </host>
      </service>

 

 

而後我想講的是,如何用這個生成的app.config文件替換原來HostApp中的代碼。
ip

要作的改變以下:string

  1. 將HostApp類裏面的代碼改刪得都刪掉,以下。
    HostApp
    
    namespace Host
    {
        
        //用了xml文件,這個類就能夠精簡不少,只須要這幾句就行
        public class HostApp
        {
            static void Main(string[] args)
            {
               
                ServiceHost host = new ServiceHost(typeof(HelloWorld));
                host.Open();
                Console.WriteLine("Start Your Service.");
                Console.ReadKey();
                host.Close();
            }
        }
    }

     

  2.運行服務,並在瀏覽器地址欄中輸入http://localhost:8080/HelloService,出現以下效果,表示服務端OK了。it

 

    3.接下來就是Client端了。打開客戶端的項目(服務端不要關閉),選擇Client項目下的Service Reference,在你的服務命名空間上右鍵,點擊Update Service Reference。

會生成新的app.config文件。ClientApp的代碼沒變,點擊運行。

namespace Client
{
    public class ClientApp
    {
        static void Main(String[] args)
        {
            ServiceEndpoint httpEndpoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(IHello)),
                new BasicHttpBinding(), new EndpointAddress("http://localhost:8080/HelloService"));
            using (ChannelFactory<IHello> factory = new ChannelFactory<IHello>(httpEndpoint))
            {

                IHello service = factory.CreateChannel();
                service.Hello();
                
            }


        }
    }
}

 

相關文章
相關標籤/搜索