我花了非常沮丧的一天来调试一个 Hello World Silverlight Web 应用程序。该应用程序通过 Windows Communication Foundation (WCF) 与托管在远程服务器上的 Hello World Web 服务进行通信。
起初,该应用程序不断给我以下错误:
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.
在谷歌上搜索了一段时间后,我以为我遇到了常见的跨域问题。所以我尝试将跨站点策略文件添加到Web根文件夹中。但这并没有消除错误。
幸运的是,我偶然在网上看到了一个 WCF 服务的代码,它在 web 服务的program.cs中的main函数之前有一个“[STAThread]”关键字。所以我做了同样的事情,即在main方法之前添加了[STAThread]。这个简单的技巧神奇地解决了这个问题。但我不知道这背后的机制。谁能给我解释一下?
顺便说一句:另一个问题是,当我在 localhost 上托管服务时,上述错误又回来了,即 silverlight 应用程序无法与服务通信。但是控制台应用程序可以成功地与服务通信。我想知道这是否是因为本地主机禁用了 silverlight 应用程序所需的某些系统服务,以便在服务器提供 WCF 时使用它。