問題:瀏覽器
使用WCF Service Configuration Editor工具生成XML文件來進行WCF的配置,而不是在CS文件中敲代碼。app
解決過程:工具
要取代上篇文章中HostApp.cs文件裏的幾行配置代碼,使用工具配置步驟以下:spa
原理: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
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(); } } } }