WCF跨域 这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP

尝试向 URI“http://localhost:8001/AccountService.svc”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送 SOAP 相关的 HTTP 标头。出现此错误也可能是由于使用的是 Web 服务代理中的内部类型而没有使用 InternalsVisibleToAttribute 属性。有关详细信息,请参阅内部异常。 

解决方法:

  一、在WCF项目根目录下添加clientaccesspolicy.xml文件

<?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>

二、在silverlight项目中添加一个中介类ServerManager.cs

public class ServerManager

    {

        private static ServiceWcfClient servicePicture = new ServiceWcfClient();

        internal static ServiceWcfClient GetPox()

        {

            if (servicePicture.State == System.ServiceModel.CommunicationState.Created)

            {

                servicePicture.Endpoint.Address = new System.ServiceModel.EndpointAddress("http://localhost:52207/ServiceWcf.svc");

                return servicePicture;

            }

            else

            {

                return servicePicture;

            }

        }

    }

三、实例化实体类的时候一般是这样:

ServiceWcfClient clientWcf = new ServiceWcfClient();

换成:ServiceWcfClient clientWcf = ServerManager.GetPox();

posted @ 2011-09-26 08:43  Areas  阅读(285)  评论(0编辑  收藏  举报