簡體   English   中英

WCF:從服務內部訪問Windows窗體

[英]WCF: Accessing a windows form from inside a service

我該如何實現這種情況?

我有一個以Windows窗體形式托管的WCF服務,每當服務的客戶端調用服務上的方法時,我希望服務能夠將消息寫入窗體上的文本框。

我想我會使我的WCF服務成為Singleton,使用表單實現的接口將我的表單傳遞到服務中,然后存儲該實例。 然后,當客戶端調用服務時,我可以簡單地使用表單實例寫入文本框。

我無法做到這一點,因為我無法將表單傳遞給WCF服務。

任何想法或代碼示例?

服務實例和Windows窗體在兩個獨立的線程中運行,您不能只是從服務實例更新主UI線程上的UI元素。

您需要使用同步上下文和委托才能從服務線程正確安全地更新UI。

請參閱此CodeProject文章 - 關於中間,作者談到“UI線程困境”。 這基本上是你需要做的:

SendOrPostCallback callback = 
    delegate (object state)
    {   
        yourListBox.Add(state.ToString());
    };

_uiSyncContext.Post(callback, guestName);

有關該主題的全面介紹,請參閱Juval Lowy的MSDN文章“ WCF同步上下文 ”。

在Winforms應用程序中托管WCF服務對我來說似乎是一個相當糟糕的主意 - 首先是因為所有這些線程問題,其次,它只有在winforms應用程序啟動時才會工作。 難道你不能把你的WCF服務放到控制台應用程序或Windows NT服務中,然后只創建一個基於Winforms的監控應用程序,可以檢查例如數據庫表中是否有傳入的請求消息?

看看這個SO答案 - 據我所知,它基本上是同一個問題。

可以將依賴項注入WCF服務:您只需要實現一個自定義的ServiceHostFactory,它可以為您提供所有連接。

暫無
暫無

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

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