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

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



六. IIS宿主

在IIS中宿主一個(gè)服務(wù)的主要優(yōu)點(diǎn)是,在發(fā)生客戶端請求時(shí)宿主進(jìn)程會(huì)被自動(dòng)啟動(dòng),并且你可以依靠IIS來管理宿主進(jìn)程的生命周期 。IIS宿主的主要不利在于,你僅僅可以在IIS5和IIS6上使用HTTP傳輸數(shù)據(jù);而且當(dāng)使用IIS5時(shí),你僅可以使用80端口 。在IIS上宿主非常類似于宿主一個(gè)典型的ASMX Web服務(wù) 。你需要在IIS下創(chuàng)建一個(gè)虛擬的目錄并且提供一個(gè).svc文件 。這個(gè).svc文件的功能就象一個(gè)被用來標(biāo)識(shí)服務(wù)的code-behind文件和類的.asmx文件一樣 。

<%@ ServiceHost
Language = "C#"
Debug = "true"
CodeBehind = "~/App_Code/MyService.cs"
Service = "MyService"
%>
你甚至可以把服務(wù)代碼以內(nèi)聯(lián)方式注入到.svc文件中,但是不建議這樣用(就象對于ASMX的情形一樣) 。一旦你準(zhǔn)備好了.svc文件,你就可以使用一個(gè)瀏覽器來觀看它 。如果一切順利,那么你將得到一個(gè)確認(rèn)頁面 。

Visual Studio 2005能夠?yàn)槟闵梢粋€(gè)新的IIS宿主的服務(wù) 。這只要從File菜單下選擇"New Website",然后從"New Web Site"對話框中選擇WinFX服務(wù) 。這使得Visual Studio 2005創(chuàng)建一個(gè)新的Web站點(diǎn),服務(wù)代碼和匹配的.svc文件 。另外,Web站點(diǎn)配置文件必須列舉出你想要暴露的服務(wù)類型 。你需要使用完全限定類型名(包括程序集名),如果類型來自于一個(gè)未引用的程序集的話 。

<system.serviceModel>
<services>
<service name="MyNamespace.MyService">
...
</service>
</services>
</system.serviceModel>
七. 自宿主

自宿主是當(dāng)開發(fā)者負(fù)責(zé)提供和管理宿主進(jìn)程的生命周期時(shí)使用的技術(shù)名詞 。自宿主被應(yīng)用在位于客戶端和服務(wù)之間的一個(gè)進(jìn)程(或計(jì)算機(jī))邊界環(huán)境中,以及當(dāng)使用進(jìn)程中服務(wù)的情況下(也就是說,與客戶端處于相同的進(jìn)程中) 。你需要提供的進(jìn)程可能是任何Windows進(jìn)程,例如,一個(gè)Windows表單應(yīng)用程序,一個(gè)控制臺(tái)應(yīng)用程序或一個(gè)Windows NT服務(wù) 。注意,該進(jìn)程必須在客戶端調(diào)用服務(wù)之前先運(yùn)行起來;典型情況下,這意味著,你必須預(yù)先啟動(dòng)它 。對于NT進(jìn)程中服務(wù)來說這并不是一個(gè)問題 。

類似于IIS宿主,宿主應(yīng)用程序配置文件必須列出你想宿主的服務(wù)的類型并且暴露給外界 。而且,該宿主進(jìn)程必須在運(yùn)行時(shí)刻顯式地注冊服務(wù)類型并且打開該宿主以便于客戶端調(diào)用 。典型地,這是在Main()方法中使用如下定義的助理類ServiceHost實(shí)現(xiàn)的:

public interface ICommunicationObject : IDisposable
{
void Open();
void Close();
//更多成員
}
public abstract class CommunicationObject :
ICommunicationObject
{...}
public class ServiceHostBase : CommunicationObject,...
{...}
public class ServiceHost : ServiceHostBase,...
{
public ServiceHost(Type serviceType,
params Uri[]baseAddresses);
//更多成員
}
提供給ServiceHost的構(gòu)造函數(shù)的信息有:服務(wù)類型和(可選)默認(rèn)的基地址 。該基地址集可以是一個(gè)空集(以后,你可以配置不同的基地址) 。擁有一組基地址能夠使服務(wù)接受在多個(gè)地址和協(xié)議上的調(diào)用 。注意,每個(gè)ServiceHost實(shí)例都關(guān)聯(lián)與一個(gè)特定的服務(wù)類型,并且如果宿主進(jìn)程需要宿主多個(gè)類型的服務(wù)的話,你需要一些匹配的ServiceHost實(shí)例 。通過調(diào)用宿主中的ServiceHost.Open()方法,你允許調(diào)入(call-in);并且通過調(diào)用ServiceHost.Close()方法,你可以體面地退出宿主實(shí)例并完成到當(dāng)前客戶端的數(shù)據(jù)發(fā)送,并且還要拒絕未來的客戶端調(diào)用-即使宿主進(jìn)程仍在運(yùn)行中 。典型地,關(guān)閉操作是在宿主進(jìn)程關(guān)閉時(shí)實(shí)現(xiàn)的 。例如,為了把這個(gè)服務(wù)宿主在一個(gè)Windows表單應(yīng)用程序中:

[ServiceContract]
interface IMyContract
{...}
class MyService : IMyContract
{...}
你可以編寫:

推薦閱讀