您好,登錄后才能下訂單哦!
這篇文章給大家介紹怎么解決WCF自宿主問題,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
經過長時間學習WCF,對WCF也有一定程度上的認識了解,這里就發表下我的言論吧。WCF自宿主是當開發者負責提供和管理宿主進程的生命周期時使用的技術名詞。自宿主被應用在位于客戶端和服務之間的一個進程(或計算機)邊界環境中,以及當使用進程中服務的情況下(也就是說,與客戶端處于相同的進程中)。
你需要提供的進程可能是任何Windows進程,例如,一個Windows表單應用程序,一個控制臺應用程序或一個Windows NT服務。注意,該進程必須在客戶端調用服務之前先運行起來;典型情況下,這意味著,你必須預先啟動它。對于NT進程中服務來說這并不是一個問題。類似于IIS宿主,WCF自宿主應用程序配置文件必須列出你想宿主的服務的類型并且暴露給外界。而且,該宿主進程必須在運行時刻顯式地注冊服務類型并且打開該宿主以便于客戶端調用。典型地,這是在Main()方法中使用如下定義的助理類ServiceHost實現的:
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的構造函數的信息有:服務類型和(可選)默認的基地址。該基地址集可以是一個空集(以后,你可以配置不同的基地址)。擁有一組基地址能夠使服務接受在多個地址和協議上的調用。注意,每個ServiceHost實例都關聯與一個特定的服務類型,并且如果宿主進程需要宿主多個類型的服務的話,你需要一些匹配的ServiceHost實例。通過調用宿主中的ServiceHost.Open()方法,你允許調入(call- in);并且通過調用ServiceHost.Close()方法,你可以體面地退出宿主實例并完成到當前客戶端的數據發送,并且還要拒絕未來的客戶端調用-即使宿主進程仍在運行中。典型地,關閉操作是在WCF自宿主進程關閉時實現的。例如,為了把這個服務宿主在一個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(); //能夠攔截調用: Application.Run(new MyForm()); serviceHost.Close(); }
關于怎么解決WCF自宿主問題就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。