首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STAThread是否需要C#中的WCF服务?

STAThread是否需要C#中的WCF服务?
EN

Stack Overflow用户
提问于 2012-08-07 14:01:47
回答 1查看 766关注 0票数 1

我花了非常沮丧的一天来调试应用程序。该应用程序通过(WCF)与远程服务器上的Hello服务进行通信。

一开始,应用程序不断地给我以下错误:

代码语言:javascript
复制
An error occurred while trying to make a request to URI 
'http://remoteServer/service'. This could be due to attempting to 
access a service in a cross-domain way without a proper cross-domain policy 
in place, or a policy that is unsuitable for SOAP services. You may need to 
contact the owner of the service to publish a cross-domain policy file and 
to ensure it allows SOAP-related HTTP headers to be sent.

在google上搜索了一段时间之后,我想我遇到了一个常见的跨域问题。因此,我尝试将跨站点策略文件添加到web根文件夹中。但这并没有消除错误。

幸运的是,我意外地看到了WCF的代码,它在web服务的STAThread中的主函数前面有一个"STAThread“关键字。因此,我做了同样的事情,即在主方法之前添加了STAThread。这个简单的把戏神奇地治愈了这个问题。但我不知道这背后的机制。有人能解释给我听吗?

顺便说一句:另一个问题是,当我在本地主机上承载服务时,上面的错误又出现了,即silverlight应用程序无法与服务通信。但是控制台应用程序可以成功地与服务通信。我想知道这是否是因为本地主机禁用了silverlight应用程序所需的某些系统服务,以便在服务器提供WCF时使用WCF。

EN

回答 1

Stack Overflow用户

发布于 2012-08-07 14:27:46

我不是这里的专家,但是当您的(托管)代码与COM交互时,有两种类型的“公寓”,即MTA (“多线程公寓”)和STA (“单线程公寓”)。如果未指定任何内容,则当应用程序启动时,Main方法的线程将具有MTA状态。通过指定STAThread,可以强制该线程获取STA状态。

如果在应用程序的后面创建更多线程,则可以使用枚举ApartmentState设置它们的状态。

现在,我不能说在您的应用程序中需要STA状态是什么,我甚至不知道是否所有WCF应用程序都需要在STA线程中运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11847700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档