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