[英]How to make WCF work reliable?
我對如何使WCF服務可靠存在一些疑問。
設置我的服務包含3個WCF服務,2個是通過HTTP的常規Web服務,另一個是使用Protobuf的TCP服務。 TCP服務以多種方式進行了自定義,以使其與Winform clikent一起工作。
然后將其托管在Windows服務中。
WCF項目包含一個CustomHostServiceFactory,其中ApplyConfiguration用於加載所有所有緩存數據(所有服務使用與緩存所在位置相同的BLL)。
protected override void ApplyConfiguration()
{
base.ApplyConfiguration();
Startup();
}
Windows服務在啟動時包含以下內容
private ServiceHost StartService(Type serviceType)
{
ServiceHost serviceHost = null;
// Create a ServiceHost for the CalculatorService type and
// provide the base address.
Console.WriteLine("Creating service " + serviceType.FullName);
serviceHost = new ServiceHost(serviceType);
serviceHost.Opened += serviceHost_Opened;
serviceHost.Closed += serviceHost_Closed;
// Open the ServiceHostBase to create listeners and start
// listening for messages.
Console.WriteLine("Starting service...");
serviceHost.Open();
Console.WriteLine("Service started successfully");
Console.WriteLine("...");
return serviceHost;
}
Windows服務中的Main(ServiceBase)和OnStart(override)都使用了此代碼。
問題現在,我必須確保這是正確的設置原因? 服務可以在啟動期間但在緩存的初始化未運行之前收到呼叫嗎?
不幸的是,該服務僅在調用.Open()
之后接受請求。 如果尚未打開,則將發生EndpointNotFoundException
。
同樣,服務本身的啟動代碼-即公共ctor()直到第一個請求通過后才運行。
現在,我必須確保這是正確的設置原因? 服務可以在啟動期間但在緩存的初始化未運行之前收到呼叫嗎?
只要確保init代碼在serviceHost.Open();
之前運行即可serviceHost.Open();
。
如果客戶端在端點可用之前調用服務,則客戶端將獲得連接異常。 當端點打開時,可以確保在Open()
之前已調用了初始化代碼,並且您的服務已准備就緒,可以處理請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.