<%@ ServiceHost Language = "C#" Debug = "true" CodeBehind = "~/App_Code/MyService.cs" Service = "MyService" %> 你甚至可以把服務代碼以內(nèi)聯(lián)方式注入到.svc文件中,但是不建議這樣用(就象對于ASMX的情形一樣)。一旦你預備好了.svc文件,你就可以使用一個瀏覽器來觀看它。假如一切順利,那么你將得到一個確認頁面。
Visual Studio 2005能夠為你生成一個新的IIS宿主的服務。這只要從File菜單下選擇"New Website",然后從"New Web Site"對話框中選擇WinFX服務。這使得Visual Studio 2005創(chuàng)建一個新的Web站點,服務代碼和匹配的.svc文件。另外,Web站點配置文件必須列舉出你想要暴露的服務類型。你需要使用完全限定類型名(包括程序集名),假如類型來自于一個未引用的程序集的話。
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ù)的信息有:服務類型和(可選)默認的基地址。該基地址集可以是一個空集(以后,你可以配置不同的基地址)。擁有一組基地址能夠使服務接受在多個地址和協(xié)議上的調(diào)用。注重,每個ServiceHost實例都關(guān)聯(lián)與一個特定的服務類型,并且假如宿主進程需要宿主多個類型的服務的話,你需要一些匹配的ServiceHost實例。通過調(diào)用宿主中的ServiceHost.Open()方法,你答應調(diào)入(call-in);并且通過調(diào)用ServiceHost.Close()方法,你可以體面地退出宿主實例并完成到當前客戶端的數(shù)據(jù)發(fā)送,并且還要拒絕未來的客戶端調(diào)用-即使宿主進程仍在運行中。典型地,關(guān)閉操作是在宿主進程關(guān)閉時實現(xiàn)的。例如,為了把這個服務宿主在一個Windows表單應用程序中:
[ServiceContract] interface IMyContract {...} class MyService : IMyContract {...} 你可以編寫: public static void Main() { Uri baseAddress = new Uri("http://localhost:8000/"); ServiceHost serviceHost; serviceHost = new ServiceHost(typeof(MyService),baseAddress); serviceHost.Open(); //能夠攔截調(diào)用: application.Run(new MyForm()); serviceHost.Close(); } 注重,你可以在調(diào)用ServiceHost.Open()之后攔截調(diào)用,因為該宿主接收在工作者線程上的所有調(diào)用。對ServiceHost.Open()的調(diào)用將加載WCF運行時刻并且支持接收客戶端調(diào)用。該宿主能注冊多個基地址,只要它們至少在傳輸方面存在不同:
Uri tcpBaseAddress = new Uri("net.tcp://localhost:8001/"); Uri httpBaseAddress = new Uri("http://localhost:8002/"); ServiceHost serviceHost = new ServiceHost(typeof(MyService),tcpBaseAddress,httpBaseAddress); 通過從"Add New Item"對話框中選擇WCF服務,Visual Studio 2005答應你把一個WCF服務添加到任何應用程序工程。以此方式添加的服務當然是進程中服務(相對于宿主進程來說),但是也可以由外部客戶端存取。八. WAS宿主