2

是否可以将REST (WCF) 服务配置为作为STA而不是MTA运行?

为了运行旧的 COM 对象,需要这种方法。为了将 ASMX Web 服务配置为作为 STA 而不是 MTA 运行,有一种可用的解决方法,它使用 HTTPHandler 来强制 Web 服务作为 STA 运行。

Jeff Prosise 的一篇文章http://msdn.microsoft.com/en-us/magazine/cc163544.aspx详细介绍了解决方法以及如何应用它。将相同的 HTTPHandler 应用于基于 REST 的 WCF 服务(使用Visual Studio 中的Create New ADO.NET Data Service)会在调用 WebServiceHandlerFactory 时产生错误(它正在传递 HTTPContext、URL 等)。

该处理程序适用于 ASMX Web 服务,我可以添加一个 WebMethod,将线程模型作为 STA 返回。但是,即使在设置 ASPCompatibility(在web.config类级别和类级别)之后,自定义 HTTPHandler 在尝试使用 REST 服务时总是会在同一点产生错误。我没有配置任何端点,因为我正在使用带有几个“服务操作员”方法的基本 REST 服务。错误是:

无法将“System.Web.Compilation.BuildResultCustomString”类型的对象转换为“System.Web.Compilation.BuildResultCompiledType”类型。

4

2 回答 2

0

阅读与 COM+ 应用程序集成,看看这是否能让您有所收获。

于 2009-07-06T23:55:47.660 回答
0

我来自相反的方向(试图将我的 STA COM 转换为 MTA),如果您在服务实例中实例化 COM 并且您的 COM 是具有正确注册表项的正确 STA,我相信它是自动的。这就是它为我工作的方式,我为此 COM 创建了至少 5 个包装器。

如果您手动创建线程,您可能需要使用SetApartmentState

于 2014-04-08T00:49:43.463 回答