我有一个 Silverlight 应用程序,它对 WCF 服务有一些调用。silverlight 和 WCF 都位于本地主机上。当我运行 silverlight 应用程序但在通信异常中调用 WCF 时失败。我从网上了解到,这可能是因为 WCF 和 silverlight 没有在同一个端口上运行,我必须添加 clientaccesspolicy.xml 文件。但我不明白什么是“域根”我必须在那里找到 xml。你能告诉我我必须在那里找到xml的路径(在本地主机上)
谢谢!
我有一个 Silverlight 应用程序,它对 WCF 服务有一些调用。silverlight 和 WCF 都位于本地主机上。当我运行 silverlight 应用程序但在通信异常中调用 WCF 时失败。我从网上了解到,这可能是因为 WCF 和 silverlight 没有在同一个端口上运行,我必须添加 clientaccesspolicy.xml 文件。但我不明白什么是“域根”我必须在那里找到 xml。你能告诉我我必须在那里找到xml的路径(在本地主机上)
谢谢!
“域根”是您托管 Silverlight 应用程序的 HTTP 域的根地址。这有点违反直觉,但请记住策略文件正在处理跨域脚本问题。
因此,如果对于其中任何一个:
http://www.yourdomain.com
http://www.yourdomain.com/app
http://www.yourdomain.com/app1/PageSilverlightNeedsToHit.aspx
http://www.yourdomain.com/app1/Service1.svc
http://www.yourdomain.com/apps/yourapp/folders/services/versions/otherlongnames/
您必须有一个有效的 clientaccesspolicy.xml 在
http://www.yourdomain.com/clientaccesspolicy.xml
一个简单的测试是从浏览器中访问该 url (http://www.yourdomain.com/clientaccesspolicy.xml) 并确保您获取访问 XML。这将模仿 Silverlight 的行为。
如果您的主机设置无法做到这一点,请回复。此请求还有其他选项(自定义 iis 处理程序等),但根据您的需要,它们可能会过大。
将 clientaccesspolicy.xml 添加到 Visual Studio 中的 silverlght 托管项目,例如 MyProject.Web。很短,将它放在应用程序的 Web.config 附近。
我昨天刚刚使用 IIS 托管的 WCF 服务进行了此操作。我将 XML 文件放在 c:\inetpub\wwwroot 中(我想。它在我工作的机器上)。
如果您不是 IIS 托管的,它可能会有所不同。当我第一次开发我的服务时,我是作为一个自托管的 exe 来开发的。在那种情况下,我没有使用 XML 文件。相反,我在我的自托管 exe 项目中实现了另一个“服务”。该服务自动创建了 XML 文件。我手头没有详细资料。如果到那时您还没有解决问题,我可以在星期一发布更多信息。
同时,请参阅此链接:
本地 WCF 服务的 ClientAccessPolicy.xml 放在哪里?
或者这个: