程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WCF從理論到實踐(4):路在何方

WCF從理論到實踐(4):路在何方

編輯:關於.NET

本文的出發點

通過閱讀本文,您能了解以下知識:

Address是什麼?

Address的組成?

如何在配置文件中指定Address?

如何通過編程方式設置Address?

Address有什麼特殊應用?

本文適合的讀者

適合WCF初學者,可以沒有任何SOA和其他分布式開發經驗

Address是什麼?

一個要和服務端通訊的客戶端要做的第一件事情,就是搞清數據要發給誰?目的地在哪?而Address正是通過一個Uri來唯一標示一個WCF的終節點(EndPoint)的,它標示了消息發送的目的地。在WCF 數據通訊中,它解決了服務在哪裡的問題。

Address的組成?

Address在WCF中的用System.ServiceModel.EndpointAddress對象來表示的,它的結構如下:

組成部分 作用 Uri 指示EndPoint的地址,是必須的 Identity 能保證地址的唯一性,當Uri一致的時候,可以用Identity來區分EndPoint,可有可無 Headers 為地址提供了一些附加信息,用於Soap Message Filter,最後會添加到Soap消息的Header中

此外,Address還包括IsAnonymous屬性,用於指示終節點是否能匿名訪問。

如何在配置文件中指定Address?

在配置文件中,有兩種方式可以指定Address,一種是絕對地址方式,另外是相對地址方式,分別如下:

絕對地址

<host>
<baseAddresses>
<add baseAddress = "http://localhost:8731/" />
</baseAddresses>
</host>
<endpoint address ="http://localhost:8731/Service" binding="basicHttpBinding" contract="Wcf_Address_Config.IService1"> </endpoint>

相對地址

<host>
<baseAddresses>
<add baseAddress = "http://localhost:8731/" />
</baseAddresses>
</host>
<endpoint address ="Service1" binding="basicHttpBinding" contract="Wcf_Address_Config.IService1"></endpoint>

在網上有人說絕對地址是通過將httpGetEnabled設置為true,並且設置httpGetUrl為絕對地址是在設置endPoint的說法有些不准確,因為在WCF中有兩種地址,一種是訪問endPoint時候用到地址,另外一種是服務描述的地址,服務描述在wcf中被稱作serviceMetadata,通過它能夠產生代理類,比如,我們做如下的設置:

<serviceMetadatahttpGetEnabled="True"httpGetUrl="http://localhost:8731/Service"/>

只代表在http://localhost:8731/Service/?wsdl上能找到服務描述,可以通過http://localhost:8731/Service/?wsdl生成代理類,而不是將endPoint的地址設置為了http://localhost:8731/Service,這點一定要注意,不要受有些說法的誤導。

如何通過編程方式設置Address?

除了能在配置中設置Address外 ,還可以通過編程的方式來設置Address,具體方法請參參見下面的代碼示例:

static void Main(string[] args)
{
EndpointAddress address = new EndpointAddress("http://127.0.0.1:2136/Service1");
Binding binding = new BasicHttpBinding();
wcf.IService1 service = new wcf.Service1Client(binding, address);
Console.WriteLine(service.GetData(2));
Console.Read();
}

上面的代碼就是將endPoint的地址設置為了http://127.0.0.1:2136/Service1

Address有什麼特殊應用?

在wcf中,能夠將服務同時發布到幾個地址上面,只要這些地址采用的都是一種訪問方式。這種一份程序,多個發布地址的做法,在以往的技術中是沒有的。

示例項目:

通過代碼方式設置Address:

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved