日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

WinVista新技術(shù) WCF開發(fā)指南之構(gòu)建服務(wù)( 六 )

十一. 管理端點(diǎn)配置

請考慮下列服務(wù)定義:

namespace MyNamespace
{
[ServiceContract]
interface IMyContract
{...}
Class MyService : IMyContract
{...}
}
列表2(見本文相應(yīng)下載源碼)展示了在宿主進(jìn)程配置文件中要求的入口 。管理配置是在大多數(shù)情況下的配置,因?yàn)樗峁╈`活性來實(shí)現(xiàn)改變服務(wù)地址、綁定甚至暴露合同而不必重新構(gòu)建和重新發(fā)布服務(wù) 。

源碼中的列表3展示了一個(gè)配置文件-它定義暴露多個(gè)端點(diǎn)的單個(gè)服務(wù) 。注意,這些端點(diǎn)必須提供一個(gè)與綁定相一致的基地址(例如,對于HTTP使用WSHttpBinding綁定) 。每一個(gè)不匹配都會導(dǎo)致在服務(wù)加載時(shí)刻拋出一個(gè)異常 。只要URI是不同的,那么你可以使用相同的基地址來配置多個(gè)端點(diǎn):

<service name="MyNamespace.MyService">
<endpoint Address =
"net.tcp://localhost:8001/Service1/"
...
/>
<endpoint
address="net.tcp://localhost:8001/Service2/"
...
/>
</service>
還可以省略地址-在這種情況下,該服務(wù)使用與宿主一起注冊的基地址(宿主必須提供一個(gè)匹配的基地址):

<endpoint
binding="wsHttpBinding"
contract="MyNamespace.IMyContract"
/>
可以僅提供一個(gè)URI-在這種情況下,地址是在基地址下的相對地址(并且宿主必須提供一個(gè)匹配的基地址):

<endpoint
address="SubAddress"
...
/>
當(dāng)提供一個(gè)基地址時(shí),該端點(diǎn)覆蓋宿主所提供的任何基地址:

<endpoint
address="http://localhost:8000/MyService/"
...
/>
注意,當(dāng)使用IIS進(jìn)行宿主時(shí),服務(wù)必須使用IIS基地址(在HTTP中使用計(jì)算機(jī)名 虛擬目錄) 。

十二. 端點(diǎn)配置編程

以編程方式實(shí)現(xiàn)端點(diǎn)配置完全等價(jià)于管理配置;然而,它不必依賴于一個(gè)配置文件而是可以通過編程調(diào)用來把端點(diǎn)添加到ServiceHost實(shí)例 。再次強(qiáng)調(diào)的是,這些調(diào)用總是位于服務(wù)代碼的范圍之外 。ServiceHost提供AddServiceEndpoint()方法的重載版本:

public class ServiceHost : ServiceHostBase
{
 public ServiceEndpoint AddServiceEndpoint(Type implementedContract,Binding binding,String address);
 //另外的成員
}
列表4展示了與在列表3中的端點(diǎn)一樣的可編程的配置 。為了依賴宿主基地址,只需要提供如地址一樣的URI即可:

Uri tcpBaseAddress = new Uri("http://localhost:8000/");
ServiceHost serviceHost = new ServiceHost(typeof(MyService),tcpBaseAddress);
Binding tcpBinding = new NetTcpBinding();
//使用基地址作為地址
serviceHost.AddServiceEndpoint(typeof(IMyContract),tcpBinding,"");
//添加相對地址
serviceHost.AddServiceEndpoint(typeof(IMyContract),tcpBinding,"MyService");
//忽略基地址
serviceHost.AddServiceEndpoint(typeof(IMyContract),tcpBinding,
"net.tcp://localhost:8001/MyService");
serviceHost.Open();
十三. 小結(jié)

在本篇中,我們?nèi)娼榻B了構(gòu)建一個(gè)WCF服務(wù)所需要的基本概念,有關(guān)完整的WCF服務(wù)的例子請參考本文相應(yīng)源碼 。在下篇中,我們將給出一個(gè)使用WCF進(jìn)行Windows開發(fā)的客戶端案例分析 。

推薦閱讀