Silverlight Crossdomain

t3r*_*rse 25 silverlight cross-domain

我已经看到很多MSDN链接,"可以在我的机器上运行!" 答案所以我想问一下我的问题是否有重复我正在做的事情的确切步骤.因为我们正在使用已经存在的Web服务,所以我要问的是在我的项目之外托管web服务的上下文,与在线的许多教程和视频不同.所以这里:

***创建一个新的ASP.NET Web服务项目.

它将带有一个现有的Service.asmx文件,它暴露了一个"HelloWorld"Web方法.

在浏览器中查看,点击"调用"按钮.它应该返回"Hello World"字符串.

在我的机器上,URL为:" http:// localhost:15511/WebSite5/Service.asmx "

***启动Visual Studio的新实例,创建Silverlight Web应用程序项目.

***使用事件处理程序在其上粘贴一个按钮以调用Web服务.我个人核对Grid并使用一个简单的StackPanel.例如.

<UserControl x:Class="SilverlightApplication1.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300">
    <StackPanel>
        <Button Click="Button_Click">
            <Button.Content>
                <TextBlock Text="Test"/>
            </Button.Content>
        </Button>
    </StackPanel>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

使用Button_Click的语句和事件处理程序添加Web引用:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ServiceSoapClient client = new ServiceSoapClient();
        client.HelloWorldCompleted += (object s, HelloWorldCompletedEventArgs ea) => { 
            MessageBox.Show(ea.Result); 
        };
        client.HelloWorldAsync();
    }
Run Code Online (Sandbox Code Playgroud)

运行,当然,由于跨域问题,它会爆炸.接下来,将带有以下内容的clientaccesspolicy.xml文件添加到托管服务的Web应用程序的根目录:

<?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 include-subpaths="true" path="/"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>
Run Code Online (Sandbox Code Playgroud)

这应该打开了,因为它有标题,uris和资源的通配符,对吧?

  • 再次运行,你会收到一个错误:

尝试向URI" http:// localhost:15511/WebSite5/Service.asmx " 发出请求时发生错误.这可能是由于尝试在没有适当的跨域策略的情况下以跨域方式访问服务,或者是不适合SOAP服务的策略.您可能需要联系服务的所有者以发布跨域策略文件,并确保它允许发送与SOAP相关的HTTP标头.

所以问题:clientaccesspolicy文件有秘密吗?可以选择尝试使用crossdomain.xml,但它会产生类似的结果.

Soc*_*rdo 8

我遇到过这个问题(SL v5.0和Visual Studio 2010),为我修复的是我进入Silverlight项目属性>> Silverlight选项卡并选择"在浏览器中运行时需要提升信任"


Don*_*ker 5

我有过几次同样的问题.在过去,我通过使用Web App作为启动来解决这个问题,但看起来你已经做到了.

我关于这个主题的帖子:http://www.donnfelker.com/silverlight-cross-domain-issue/