我知道这个问题已经回答了很多次,但由于某种原因我无法解决。我希望有人能解决我的问题,这对很多人来说可能很简单,但我有些人怎么想不通,因为我对银光和网络还比较陌生。我已经尝试了互联网上所有可能的跨域错误样本,但无法修复。如果有人能帮助我解决我面临的这个问题,我将不胜感激。
我正在从Silverlight 4客户端访问WCF服务。我在wwwroot中有Clientacccesspolicy.xml和Crossdomain.xml。
我可以使用[http://localhost/Remoteapp.html]。但是,当应用程序尝试进行Web服务调用时,尽管根目录中有Clientaccesspolicy.xml文件,但我还是遇到了跨域错误。
在webdeveloperhelper中,我可以看到在wcfservice端口[http://localhost:600061/clientaccesspolicy.xml]请求clientaccesspolicy,这是我的服务所在的位置,我得到了502响应[Connection failed]。
当我键入[http://localhost/Clientaccesspolicy.xml]在浏览器中我可以找到文件。但是silverlight在错误的位置请求策略文件。
每件事在设计时都能正常工作,但当我将其部署到IIS时,我会遇到这个错误。
有人能帮我解决这个问题吗?提前感谢每一个人。
步骤1:请检查WCF服务主机上是否有clientaccesspolicy.xml文件或crossdomain.xml文件。
以下clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="SOAPAction">
<domain uri="*"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
类似的crossdomain.xml文件是:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
如果不起作用,请尝试以下步骤
在部署silverlight应用程序的服务器上,通常位于ASP.NET应用程序的ClientBin文件夹中,将silverlight的应用程序文件*.xap重命名为*.zip
提取zip文件的内容
编辑ServiceReferences.ClientConfig文件
将端点地址从localhost更新为承载WCF服务的服务器地址。
保存文件。压缩内容并重命名回.xap
步骤1:将带有以下代码的crossdomain.xml
放入web服务托管文件夹中。
<?xml version="1.0" ?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*"/>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
步骤2:当您添加对上述WCF Web服务的引用时,也将相同的文件放在您的silverlight项目中。
步骤3:更新您的参考资料并发布silverlight项目。
请尝试以下步骤。它肯定会起作用。
我也遇到过同样的问题,经过一周的跟踪,我知道根目录中有ClientAcessPolicy.xml和CrossDomainPolicy.xml不会为u r请求提供服务,ClientAcessPolicy.xml和CrossDomianPolicy.xml必须仅通过服务发送。
按照以下步骤解决此问题
-
在Iservice1.cs中添加一个新的NameSpace,如下所示
[ServiceContract(Namespace = "http://ServiceWCF")] public interface IPolicyRetriever { [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")] Stream GetSilverlightPolicy(); [OperationContract, WebGet(UriTemplate = "/crossdomain.xml")] Stream GetFlashPolicy(); };
-
现在编辑Service1.svc文件进行编辑,
public class PolicyClass : IPolicyRetriever { Stream StringToStream(string result) { WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml"; return new MemoryStream(Encoding.UTF8.GetBytes(result)); } public Stream GetSilverlightPolicy() { string result = @"<?xml version=""1.0"" encoding=""utf-8""?> <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers=""*""> <domain uri=""*""/> </allow-from> <grant-to> <resource path=""/"" include-subpaths=""true""/> </grant-to> </policy> </cross-domain-access> </access-policy>"; return StringToStream(result); } public Stream GetFlashPolicy() { string result = @"<?xml version=""1.0""?> <!DOCTYPE cross-domain-policySYSTEM""http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd""> <cross-domain-policy> <allow-access-from domain=""*"" /> </cross-domain-policy>"; return StringToStream(result); } }
-
现在在项目位置中添加两个文件
- 为了避免一些问题,我们可以同时将文件添加到根文件夹中
这些是必须在Internet Explorer中进行的一些更改,在服务启动并运行后,现在在浏览器中测试ClientAccesspolicy.xml和Crossdoaminpolicy.xml是否可以从Internet Explorer访问。完成所有这些操作后,必须在浏览器中将Microsoft Azure VM链接添加为受信任的站点或域
- 首先导航到Internet Explorer->Internet选项->安全性->本地Intranet->站点
现在选中"自动检测intranet网络"复选框,单击"高级"并添加VM 的相应站点URL
- Internet Explorer->Internet选项->安全性->受信任的站点,添加SP2013 URL作为添加的URL
现在在同一窗口中单击自定义级别启用所有.Net Framework、Active X Controls、启用.Net Framework设置
- 现在转到高级选项卡,取消选中禁用脚本调试(Internet Explorer)、禁用脚本调试
在同一个选项卡中,我们还需要启用一些选项,它们是允许CD中的活动内容在我的计算机上运行,允许活动控件在我的电脑上的文件中运行,启用本地XMLHTTP支持。
完成所有这些之后,检查Sliverlight应用程序是否正常运行。当然,如果这些步骤处理得当,应用程序将完美运行。