簡體   English   中英

自托管WCF服務中的后台工作者

[英]Background worker in selfhosted WCF Service

我對WCF和多線程是完全陌生的。 因此,我按照本教程設置了自托管的WCF服務。 右鍵單擊“ INews_Service”接口后,單擊“實現接口”。 然后,VS創建一個名為DoWork()的方法。

在上面的教程中,不需要DoWork()方法(->已刪除)。 但是,在我的項目中,我想使用此方法來運行后台工作線程/任務。

在我的項目中,后台工作人員應該從外部設備永久加載數據並將其存儲在DataContract類中。 反過來,WCF服務應該向外部WCF使用者同時提供該DataContract類的實例。

參考上面的教程,添加后台工作程序方法的最佳方法是什么,該方法會不斷更改DataContract類的實例中的變量?

編輯:

@Brian:非常感謝! 下面的示例顯示了上面教程中的自托管服務程序。 啟動主機后,我想運行一個無限循環,該循環不斷更新我的DataContract類。 您能舉一個例子,如何做到這一點? 我不需要任何同步,例如SpinLock或Monitor?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace WCF_NewsService
{
    class Program
    {
        static void Main(string[] args)
        {
            ServiceHost host = new ServiceHost(typeof(News_Service));
            host.Open();
            Console.WriteLine("Host Open Sucessfully ...");
            while (true)
            {
                //here I want to constantly update my DataContract-class TOInews
            }
        }
    }
}   

編輯2:

實際上,我的問題是我不知道如何訪問在另一個文件(即在本教程中的NewsService )中定義的DataContract-object objtoinews 當我運行objtoinews.ID = 1; ,VS抱怨objtoinews沒有在當前上下文中定義。

while (true)
{
    if (host.State != CommunicationState.Opened)
    {
        throw new Exception("SynchronizationWS Service Host failed.");
        break;
    }
    else
    {
        objtoinews.ID = 1;
        objtoinews.Header = "blabla";
        objtoinews.Body = "huhu";
    }
}

您無需在WCF解決方案中使用DoWork。 基本上,該教程中描述的控制台程序將在調用Host.Open()時執行DoWork()。 換句話說,Host.Open()將完成您期望的DoWork()所做的事情。

控制台充當可執行文件,但是所有工作都是由WCF服務在后台異步/多線程完成的。

Booz,我不確定為什么您認為需要不斷更新DataContract。 實際上,在程序運行時,我認為您不能。 如果您擔心有人會向您的WS主機發送不同的數據構造,則可能需要抽象化結構,以便(基本上)您的客戶端幾乎可以發送任何內容。

無論如何,這是我用來循環並檢查Web服務狀態的代碼:

while (true) {
   //broken connection case
    if (wshost.State != CommunicationState.Opened) {
        throw new Exception("Service Host failed.");
        //dump from loop and throw error
        break;  
    }

    Threading.Thread.Sleep(1000);       //sleep 1 second 
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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