WCF中的跨域错误wsHttpBindingwith silverlight

时间:2013-12-14 05:30:24

标签: c# wcf silverlight cross-domain wshttpbinding

我有一个WCF服务,我在wsHttpBinding中使用web.config

我还从IIS7创建了一个测试证书,并将其用于https绑定网站

服务的Web配置如下

<system.serviceModel>
  <behaviors>
   <serviceBehaviors>
    <behavior name="WsBehaviour">
     <serviceMetadata httpsGetEnabled="true"/>
     <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
   </serviceBehaviors>
  </behaviors>

  <bindings>
   <wsHttpBinding>
    <binding name="WsBinding">
      <security mode="Transport">
        <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
        <message clientCredentialType="None" algorithmSuite="Default" />        
      </security>            
    </binding>
   </wsHttpBinding>    
  </bindings>

  <services>
   <service name="WsService.Service1" behaviorConfiguration ="WsBehaviour">
     <endpoint address="https://MachineName.DomainName:8087/WsService/Service1.svc"
      binding="wsHttpBinding" bindingConfiguration="WsBinding" contract="WsService.IService1" >

       <identity>
         <dns value="localhost" />
       </identity>

     </endpoint>
   </service>
  </services>  
 </system.serviceModel>

当我在浏览器中打开URL时,它可以很好地工作,并且当我向Silverlight项目添加服务引用时也可以正常工作。

但是当我从应用程序调用该服务时,它会产生跨域错误。

我在项目中也包含clientaccesspolicy.xmlcrossDomain.xml,但仍面临问题

An error occurred while trying to make a request to URI
'https://MachineName.DomainName:8087/WsService/Service1.svc'. This
could be due to attempting to access a service in a cross-domain way
without a proper cross-domain policy in place, or a policy that is
unsuitable for SOAP services. You may need to contact the owner of the
service to publish a cross-domain policy file and to ensure it allows
SOAP-related HTTP headers to be sent. This error may also be caused by
using internal types in the web service proxy without using the
InternalsVisibleToAttribute attribute. Please see the inner exception
for more details.

enter image description here

2 个答案:

答案 0 :(得分:0)

clientaccesspolicy.xml需要位于Web服务器的根目录中,而不是项目中。

http://msdn.microsoft.com/en-us/library/cc197955(v=vs.95).aspx

3.将crossdomain.xml文件保存到托管服务的域的根目录。例如,如果该服务托管在http://fabrikam.com中,则该文件必须位于http://fabrikam.com/crossdomain.xml

答案 1 :(得分:0)

您需要在IIS上重新托管的WCF服务的根文件夹中添加clientaccesspolicy.xml和crossDomain.xml。