Silverlight访问WCF服务引发跨域错误
我知道这个问题已经被回答了很多次,但由于某种原因,我无法解决它。我希望有人能解决我的问题,这对很多人来说可能是直截了当的,但我不知道该怎么解决,因为我对silverlight和web比较陌生。我尝试了互联网上所有可能的跨域错误示例,但无法修复。如果有人能在我面临的这个问题上帮助我,我将不胜感激 我正在从Silverlight 4客户端访问WCF服务。我在wwwroot中有clientAccessPolicy.xml和Crossdomain.xml 我可以使用[http://localhost/Remoteapp.html]. 但是,当应用程序尝试进行webservice调用时,尽管Clientaccesspolicy.xml文件位于根目录中,我还是遇到了跨域错误 在webdevelopementhelper中,我可以看到正在wcfservice端口请求clientaccesspolicy,该端口是[http//localhost:600061/clientaccesspolicy.xml],这是我的服务所在的位置,我收到502响应[连接失败] 我打字的时候[http://localhost/Clientaccesspolicy.xml]在浏览器中,我可以找到该文件。但是silverlight在错误的位置请求策略文件 在设计时,每件事情都能正常工作,但当我将其部署到IIS时,就会出现此错误 有谁能帮我解决这个问题吗?提前感谢每一个人 步骤1: 检查WCF服务主机上是否有clientaccesspolicy.xml文件或crossdomain.xml文件 以下是clientaccesspolicy.xmlSilverlight访问WCF服务引发跨域错误,wcf,silverlight,iis-7,crossdomain.xml,clientaccesspolicy.xml,Wcf,Silverlight,Iis 7,Crossdomain.xml,Clientaccesspolicy.xml,我知道这个问题已经被回答了很多次,但由于某种原因,我无法解决它。我希望有人能解决我的问题,这对很多人来说可能是直截了当的,但我不知道该怎么解决,因为我对silverlight和web比较陌生。我尝试了互联网上所有可能的跨域错误示例,但无法修复。如果有人能在我面临的这个问题上帮助我,我将不胜感激 我正在从Silverlight 4客户端访问WCF服务。我在wwwroot中有clientAccessPolicy.xml和Crossdomain.xml 我可以使用[http://localhost/R
<?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>
如果不起作用,请尝试以下步骤
步骤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 webservice的引用时,也将相同的文件放入silverlight项目中
步骤3:更新引用并发布silverlight项目
试试这些步骤。它肯定会起作用。我也遇到了同样的问题,经过一周的跟踪,我知道在根目录中有clientAccessPolicy.xml和CrossDomainPolicy.xml不能满足您的请求,clientAccessPolicy.xml和CrossDomainPolicy.xml只能通过服务发送 请按照以下步骤解决此问题
[ServiceContract(Namespace = "http://ServiceWCF")]
public interface IPolicyRetriever
{
[OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
Stream GetSilverlightPolicy();
[OperationContract, WebGet(UriTemplate = "/crossdomain.xml")]
Stream GetFlashPolicy();
};
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);
}
}
公共类PolicyClass:IPolicyRetriever
{
Stream StringToStream(字符串结果)
{
WebOperationContext.Current.OutgoingResponse.ContentType=“应用程序/xml”;
返回新的MemoryStream(Encoding.UTF8.GetBytes(result));
}
公共流GetSilverlightPolicy()
{
字符串结果=@“
";
返回StringToStream(结果);
}
公共流GetFlashPolicy()
{
字符串结果=@“
";
返回StringToStream(结果);
}
}
这些是Internet Explorer中必须进行的一些更改,在服务启动并运行后,现在在浏览器中测试ClientAccesspolicy.xml和CrossDoAdminPolicy.xml是否可以从Internet Explorer访问。完成所有这些操作后,必须在浏览器中将Microsoft Azure VM链接添加为受信任的站点或域
完成所有这些操作后,检查Sliverlight应用程序是否正常运行。如果这些步骤处理正确,应用程序肯定会运行得很好。上面回答说,由于注释框太长,我无法将其粘贴到注释框中