【问题标题】:Running REST/WCF as STA instead of MTA for COM将 REST/WCF 作为 STA 而不是用于 COM 的 MTA 运行
【发布时间】:2009-06-24 04:36:47
【问题描述】:

是否可以将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”。

【问题讨论】:

  • MSDN 链接实际上已损坏(它重定向到通用 MSDN 杂志页面)。

标签: wcf com rest sta mta


【解决方案1】:

阅读Integrating with COM+ Applications,看看它是否能让你有所收获。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 2014-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多