none
silverlight 访问wcf 遇到跨域访问策略问题 RRS feed

  • 问题

  • WCF 服务已经正确发布, 但在Silverlight中调wcf中方法的时候就出现:

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

    但我已经IIS6的根目录(c:\intepub\wwwroot)中放置了clientaccesspolicy.xml和crossdomain.xml文件, 但为什么还是会出现跨域策略问题。而且把这两个文件用其它IIS6服务器,Silverlight调用就正常了,说明策略文件也是正确的。

    请大家帮忙看看是否可能是IIS6的配置问题? 谢谢 !


    Gao Peter
    2010年5月27日 1:23

答案

全部回复

  • SilverLight 真麻烦.
    2010年5月27日 9:13
  • 同感! 不过我现在终于找到一台IIS服务器发布WCF后,Silverlight调用时不会出现跨域访问的问题。 只是觉得挺怪的,一直找不到原因。

    Silverlight在不出现问题的时候挺好用的, 但出现问题有点让人摸不着头脑!

    你也遇到这种情况了吗?

    还有更怪的事情, 同一台IIS服务器,我建两个不同的网站(默认网站和第二个网站), Silverlight调用发布在第二个网站上WCF是正常,但访问发布在默认网站的WCF却又出现了跨域访问的问题,两个网站的策略文件是相同的(复制的)。郁闷!


    Gao Peter
    2010年5月27日 9:24
  • 策略文件应该是部署在iis根域中,怎么楼上说会复制呢,会不会你把策略文件放到了虚拟目录的根目录中?

    2010年6月2日 2:36
  • 策略文件放在IIS的根目录中也不行的!仍然提示不能跨域访问!


    Gao Peter
    2010年6月2日 3:43
  • 用fiddler截获http通信,看看silverlight有没请求跨域文件,以及服务器返回状态


    Mog Liang
    • 已标记为答案 Petergao 2010年6月2日 7:41
    2010年6月2日 6:57
  • 十分感谢楼上。 这个问题已经解决了,通过fiddler截获的数据终于找到问题了。原因是我的IIS根服务器启用了HTTPS,而WCF服务我启用了HTTP,所以当Siverlight请求策略文件时被IIS拒绝了,返回了403错误,因此Silverlight无法访问策略文件。 所以只需要关闭IIS服务的HTTPS问题就解决了!

    十分感谢!!!


    Gao Peter
    2010年6月2日 7:40
  • 我出现的错误提示:

    http://192.168.0.12:10529/SlAppTest1-Web-DomainService1.svc

    消息: Silverlight 应用程序中未处理的错误 

    代码: 4004    

    类别: ManagedRuntimeError       

    消息: System.Windows.Ria.DomainOperationException: Load operation failed for query 'GetSfd'. 尝试向 URI“http://1.0.185.106:10529/SlAppTest1-Web-DomainService1.svc/binary”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送 SOAP 相关的 HTTP 标头。出现此错误也可能是由于使用的是 Web 服务代理中的内部类型而没有使用 InternalsVisibleToAttribute 属性。有关详细信

    息,请参阅内部异常。

       位于 System.Windows.Ria.OperationBase.Complete(Exception error)

       位于 System.Windows.Ria.LoadOperation.Complete(Exception error)

       位于 System.Windows.Ria.DomainContext.CompleteLoad(IAsyncResult asyncResult)

       位于 System.Windows.Ria.DomainContext.<>c__DisplayClass17.<Load>b__13(Object )     

    URI: http://localhost:10529/SlAppTest1TestPage.aspx

    ========================================

    fiddler信息显示是:502-bad gateway:

    SESSION STATE: Aborted.

    Response Entity Size: 544 bytes.

     

    == FLAGS ==================

    BitFlags: [ResponseGeneratedByFiddler] 0x100

    X-PROCESSINFO: devenv:5936

    X-DNS-FAILOVER: True

    X-CLIENTIP: 127.0.0.1

    X-CLIENTPORT: 9386

     

    == TIMING INFO ============

    ClientConnected: 22:23:49.187

    ClientBeginRequest: 22:23:49.187

    ClientDoneRequest: 22:23:49.187

    Gateway Determination: 0ms

    DNS Lookup: 0ms

    TCP/IP Connect: 0ms

    HTTPS Handshake: 0ms

    ServerConnected: 22:23:49.187

    FiddlerBeginRequest: 00:00:00.000

    ServerGotRequest: 00:00:00.000

    ServerBeginResponse: 00:00:00.000

    ServerDoneResponse: 00:00:00.000

    ClientBeginResponse: 00:00:00.000

    ClientDoneResponse: 22:23:49.203

     

    Overall Elapsed: 00:00:00.0156250

     

    The response was buffered before delivery to the client.

     

    == WININET CACHE INFO ============

    This URL is not present in the WinINET cache. [Code: 2]

    * Note: Data above shows WinINET's current cache state, not the state at the time of the request.

    查了502错误:

    产生原因

    服务器(不一定是Web服务器)是作为网关或代理,以满足客户的要求(如Web浏览器或我们的CheckUpDown机器人)来访问所请求的URL 。此服务器收到无效响应从上游服务器访问履行它的要求。

     

    怎么处理,谢谢了!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    2010年11月12日 14:26