1

我正在開發基於WCF的WebServiceHost的開發應用程序級VSTO插件,其中包含一個帶有嵌入式Webbrowser控件的UI和一個簡單的REST式服務。該服務將內容(尤其是Flash影片)傳送到嵌入式瀏覽器。這個過去一直像昨天一樣魅力。對於某些仍然未知的原因(也許某些.NET更新已改變某些內部處理),當瀏覽器從嵌入式服務器加載Flash影片時,整個Word應用程序現在會凍結。當我將Web服務器代碼移動到單獨的進程中時它仍然有效,並且在Flash影片已經在瀏覽器緩存中時也可以工作,所以我相當確定這是在外掛程序中提供和顯示Flash影片的組合這是造成這個問題的原因。VSTO插件中的WebServiceHost

我做了一些研究(我應該早點做,也許),並瞭解到,多線程和VSTO加載項不順利起來。運行web服務肯定意味着某種多線程。

所以我的問題是:有沒有機會讓這種架構可靠運行?如果是這樣:我錯過了什麼?或者我應該更好地嘗試另一種方法?如果是這樣的話:你會推薦什麼?

注:使用「文件://」網址,從而將內容直接從磁盤加載是不是一種選擇,因爲我不能保證一個共同的文檔根,需要把用戶界面和服務內容之間的一些邏輯。

回答

1

VSTO加載項STA,所以你應該考慮研究WCF和STA(see related SO post)。

您總是可以使用host the WCF service as a windows service來避免VSTO插件主機的STA問題。

+0

對於那個非常有趣的鏈接+1,那不,唉,解決問題。帶有STA公寓狀態本身的調用線程仍然返回(使用FileStream作爲結果) - 看起來凍結髮生在.NET本身內部,其中FileStream用於填充HTTP響應。 - 使用Windows服務並不是很受外掛的某些用戶的IT操作的歡迎。所以我目前正試圖讓WCF服務在由插件啓動和控制的單獨進程中運行。 – Matthias 2012-02-27 16:35:36

+0

Matthias - 您是使用Process.Start還是隻加載另一個AppDomain來隔離進程? – SliverNinja 2012-02-27 16:42:56

+0

我正在使用Process.Start,並且現在運行足夠好。雖然這不是一個非常優雅的解決方案。而且我還不太確定可能還存在隱藏的問題。說實話,我甚至沒有想到創建一個單獨的AppDomain。你認爲這可行嗎? – Matthias 2012-02-28 19:22:29