簡體   English   中英

如何使WCF工作可靠?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM