none
调用WebService失败(已添加跨域策略文件) RRS feed

  • 问题

  • 我希望对WS和SL分开(解决方案)进行开发,在SL的UI都做好后,我引用一个在VS(轻量级服务器)上运行的一个WS(已固定端口),并已经添加了相应的Clientaccesspolicy.xml和Crossdomain.xml。
    但是无论如何SL都无法正常使用该WS。并在Reference.cs的End方法中抛出异常:
    尝试请求 URI“http://localhost:10086/Service1.asmx”时发生错误。这可能是因为在没有适当的跨域策略的情况下试图以跨域方式访问服务,或者是策略不适用于 SOAP 服务。您可能需要与服务所有者联系以发布跨域策略文件,确保策略允许发送与 SOAP 相关的 HTTP 头。请参阅内部异常以了解详细信息。
    跟踪异常堆栈:

       位于 System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
       位于 System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
       位于 System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
       位于 System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
       位于 SilverlightApplication1.ServiceReference2.Service1SoapClient.Service1SoapClientChannel.EndHelloWorld(IAsyncResult result)
       位于 SilverlightApplication1.ServiceReference2.Service1SoapClient.SilverlightApplication1.ServiceReference2.Service1Soap.EndHelloWorld(IAsyncResult result)
       位于 SilverlightApplication1.ServiceReference2.Service1SoapClient.EndHelloWorld(IAsyncResult result)
       位于 SilverlightApplication1.ServiceReference2.Service1SoapClient.OnEndHelloWorld(IAsyncResult result)
       位于 System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)
    无论该WS是部署在本地IIS,或网络IIS,或相同解决方案或不同解决方案,都抛出相同的异常。
    请各位高手不胜指教!
    附上两个策略文件:
    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>

    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>




    2009年6月9日 7:35

答案

  • 1,首先,策略文件必须放在最顶级的根目录下,
    2,最好你在iis里测试。,
    3,正确使用的例子
    http://dotnet.aspx.cc/article/2fde980d-d8d9-485d-ae5d-20246d5f7207/read.aspx

    你可以调用我的http://dotnet.aspx.cc/HelloWebService.asmx进行跨域测试。


    【孟子E章】
    • 已标记为答案 懵盛盛 2009年6月10日 9:07
    2009年6月10日 1:25
    版主

全部回复

  • 在WEB SERVICE根下增加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>

    不过在SL中异步调服务的时候如果是多次调用同一方法 Reference.cs中也会抛异常,目前这个问题我没解决掉,随既转为使用WCF进行服务调用解决了这种问题.

    希望对你有所帮助~

    2009年6月9日 9:07
  • 在WEB SERVICE根下增加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>

    不过在SL中异步调服务的时候如果是多次调用同一方法 Reference.cs中也会抛异常,目前这个问题我没解决掉,随既转为使用WCF进行服务调用解决了这种问题.

    希望对你有所帮助~


    你好,我删除了Clientaccesspolicy.xml或Crossdomain.xml都还是会出现相同的异常,使用WCF的情况也一样。
    2009年6月9日 9:15
  • 这个策略文件是我目前正在开发项目中所使用的,使用上没有问题,请检查下IIS设置吧~
    2009年6月9日 9:43
  • 1,首先,策略文件必须放在最顶级的根目录下,
    2,最好你在iis里测试。,
    3,正确使用的例子
    http://dotnet.aspx.cc/article/2fde980d-d8d9-485d-ae5d-20246d5f7207/read.aspx

    你可以调用我的http://dotnet.aspx.cc/HelloWebService.asmx进行跨域测试。


    【孟子E章】
    • 已标记为答案 懵盛盛 2009年6月10日 9:07
    2009年6月10日 1:25
    版主
  • 1,首先,策略文件必须放在最顶级的根目录下,
    2,最好你在iis里测试。,
    3,正确使用的例子
    http://dotnet.aspx.cc/article/2fde980d-d8d9-485d-ae5d-20246d5f7207/read.aspx

    你可以调用我的http://dotnet.aspx.cc/HelloWebService.asmx进行跨域测试。


    【孟子E章】

    你好,谢谢您提供的WS和例子。
    我按照例子调试,依然报相同的异常,我怀疑不是WS的问题(无论是你提供的WS还是我自己的WS),而是我这里网络的问题(换台机器依然如此)(但访问LocalHost依然一样)。
    我这里的网络情况如下(公司局域网):
    IP:172.30.7.29
    掩码:255.255.0.0
    网关:172.30.1.1
    DNS1:202.96.128.68
    DNS2:61.144.56.101
    使用以上网络配置均可以正常访问任意WS。
    不知是否需要在策略文件中添加什么选项以适应以上配置?
    2009年6月10日 2:04
  • 问题已经解决。
    由于我一直是使用SL工程直接运行的(使用自动生成的HTML)。
    后来我建个WEB站点装载这个SL程序,就没有这个问题了。
    2009年6月10日 9:08