我知道这个问题已被多次回答,但由于某些原因我无法解决。我希望有人可以解决我的问题,对许多人来说这可能是直截了当的,但是我有些无法弄明白,因为我对银光和网络相对较新。我已经尝试了互联网上有关跨域错误的所有可能样本,但无法修复它。我很感激,如果有任何一次可以帮助我解决我面临的这个问题。
我正在从Silverlight 4客户端访问WCF服务。我在wwwroot中有Clientacccesspolicy.xml和Crossdomain.xml。
我可以使用[http://localhost/Remoteapp.html]访问我的文件。但是,当应用程序尝试进行Web服务调用时,尽管在根目录中有Clientaccesspolicy.xml文件,但我收到跨域错误。
在webdevelopementhelper中,我可以看到在wcfservice端口请求了clientaccesspolicy,这是[http // localhost:600061 / clientaccesspolicy.xml],这是我的服务所在的位置,我收到了502响应[Connection]失败。
当我在浏览器中输入[http://localhost/Clientaccesspolicy.xml]时,我可以找到该文件。但是Silverlight正在错误的位置请求策略文件。
每件事在设计时都能正常工作,但是当我将它部署到IIS时,我收到了这个错误。
任何人都可以帮我解决这个问题吗?感谢每一个人提前。
答案 0 :(得分:0)
第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>
如果不起作用,请尝试以下步骤
在部署银灯应用程序的服务器上,通常在ASP.NET应用程序的ClientBin文件夹中,将silverlight应用程序文件* .xap重命名为* .zip
提取zip文件的内容
编辑ServiceReferences.ClientConfig文件
将端点地址从localhost更新为托管WCF服务的服务器地址。
保存文件。压缩内容并重命名为.xap
答案 1 :(得分:0)
第1步:将crossdomain.xml
以下代码放入您的网络服务托管文件夹。
<?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网络服务的参考时,也将相同的文件放在您的silverlight项目中。
第3步:更新您的参考并发布silverlight项目。
尝试以下步骤。它肯定会起作用。
答案 2 :(得分:0)
我也遇到了同样的问题,经过一周的跟踪后知道根目录中的ClientAcessPolicy.xml和CrossDomainPolicy.xml不会提供请求,必须发送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);
}
}
现在在项目位置
答案 3 :(得分:0)
这些是必须在Internet Explorer中进行的一些更改,在服务启动并运行之后,现在在浏览器中测试是否可以从Internet Explorer访问ClientAccesspolicy.xml和Crossdoaminpolicy.xml。完成所有这些操作后,必须将Microsoft Azure VM链接添加为浏览器中的受信任站点或域
现在选中自动检测Intranet网络的复选框,单击Advanced并添加VM的相应站点URL
现在在同一窗口中单击自定义级别启用所有.Net Framework,Active X控件,启用.Net Framework设置
在同一个选项卡中,我们还需要启用一些选项,它们是允许CD中的活动内容在我的计算机上运行,允许活动控件在我的计算机上的文件中运行,启用本机XMLHTTP支持。
完成所有这些操作后,请检查Sliverlight应用程序是否正常运行。确保如果这些步骤处理正确,应用程序将完美运行。