题
我见过很多链接,以MSDN和"适用于我的机器!"答案,所以我想问我的问题的确切步骤来重复我在做什么。因为我们正在使用现有服务,我要求与上下文的具有服务之外托管的我的项目,不同于许多教程和在线视频。因此,这里的那样:
***创建一个新的ASP.NET 服务项目。
它将与现有的服务。asmx文件暴露出一个"案的"网络的方法。
浏览器查看、打"调用"按钮。它应该回"hello World"string.
我的机器上,网址是:"http://localhost:15511/WebSite5/Service.asmx"
***开始一个新的实例,创建一个包括应用程序项目。
***坚持一个按钮在那里与一个事件处理呼叫的网服务。我亲自核武器的栅格和使用一个简单在这种情况下.例如。
<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>
添加网基准,使用声明和事件处理程序Button_Click:
private void Button_Click(object sender, RoutedEventArgs e)
{
ServiceSoapClient client = new ServiceSoapClient();
client.HelloWorldCompleted += (object s, HelloWorldCompletedEventArgs ea) => {
MessageBox.Show(ea.Result);
};
client.HelloWorldAsync();
}
- 行控中的应用。在我的情况下,我要我的Silverlight测试页在:http://localhost:15558/SilverlightApplication1TestPage.aspx
运行和它的冲击,因为制跨域的问题。因此,下一添加的 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 include-subpaths="true" path="/"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
这应该开的事情,因为它有一个通配符的标题,uri和资源,对吗?
- 再次和你会得到一个错误:
错误发生,同时试图使一个请求URI'http://localhost:15511/WebSite5/Service.asmx'.这可能是由于试图访问的服务在一个跨领域的方式没有一个适当的跨领域政策的地方,或一个政策不适合于肥皂服务。你可能需要联系的服务的所有者发布的一个跨领域的政策文件,并确保它允许肥皂相关HTTP头发送。
这样的问题:是有一个秘密的clientaccesspolicy的文件?一个可以交替尝试的crossdomain.xml 但它提供了类似的结果。
解决方案
我有这个相同的问题几次。在过去我已经解决了这个通过使用网络应用程序,因为启动,但它看起来像你已经做到了这一点。
我的后关于这个问题: http://www.donnfelker.com/silverlight-cross-domain-issue/
其他提示
我遇到这个问题(SL5.0和Visual Studio2010年)、什么是固定的,它对我来说,我进入了控项目的性质>>Silverlight选项和选定"需要提升信托运行时,在浏览器"
确保你把clientaccesspolicy.xml 文件在根IIS例如网目录
C:\Inetpub\wwwroot\clientaccesspolicy.xml
这将确保它是可以直接在http:///clientaccesspolicy.xml
我得到的同样的错误和我解决它做的上述步骤。
某事的工作对我来说开始了有什么我找到控论坛 在这里,.它基本上要求,如果我甚至可以 获得 我clientaccesspolicy.xml 或crossdomain.xml 从localhost(http://localhost/clientaccesspolicy.xml).当我试图导航有,我不能所以我只是发现的码他们两个(还在前线),并拷贝贴在代码里面的这些文件现在我inetpub\入口脚本的目录\目录(我打开他们使用记事本++).奇怪的部分是 代码没有改变所有 , 然而,它的工作!希望帮助别人!这是非常奇怪的。
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>
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>
可以祝福!
-sf
你有没有试过 提琴手 在使用这一通过即,你可以看交通统造成的,例如其跨越政策文件,它是在寻找什么?
我修改了我Internet explorer设置。网站上运行的一个实习生的服务器所以我加了它在Iexplorer信任的网站列表。(工具-->互联网的选择->安全>站点)。
然后我改变了安全的水平,并启用了交叉领域。完成,工程,但我花了段时间才能找到解决方案。
最好的, Jeppen
你必须要知道的情况,当你参考服务的内部项目有'll创建文件"中的参考。ClienConfig"和有:
**
<endpoint address="http://localhost:57675/Servis.asmx" binding="basicHttpBinding"
bindingConfiguration="ServisSoap" contract="ServiceReference1.ServisSoap"
name="ServisSoap" />
**
请确保您的网页仍然使用相同的口(例如在这里是57675).通过默认你localhost'll get random口,所以你必须去改变它是静态的数量和不动态。(右击asp.net 项目/Tab Web/特定港口/类型的数量 希望它能帮助
我遇到这样的事情,并添加一个针固定我的问题。截域政策文件本身并不进行修复。
class MyHostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
MyHost customServiceHost =
new MyHost(serviceType, new Uri("[Your URL goes here]",UriKind.Absolute));
return customServiceHost;
}
}
class MyHost : ServiceHost
{
public MyHost(Type serviceType, params Uri[] baseAddresses) base(serviceType, baseAddresses)
{ }
protected override void ApplyConfiguration()
{
base.ApplyConfiguration();
}
}
你还必须添加工厂="MyHostFactory"在标记,定义了你的服务
问题可能是,开发服务器是不是能够服务于xml文件,试试这个-明确使它可以通过WebGet
[ServiceContract]
public interface ICrossDomainService
{
[OperationContract]
[WebGet(UriTemplate = "ClientAccessPolicy.xml")]
Message ProvidePolicyFile();
}
然后ProvidePolicyFile()可以
public System.ServiceModel.Channels.Message ProvidePolicyFile()
{
FileStream filestream = File.Open(@"ClientAcessPolicy.xml", FileMode.Open);
// Either specify ClientAcessPolicy.xml file path properly
// or put that in \Bin folder of the console application
XmlReader reader = XmlReader.Create(filestream);
System.ServiceModel.Channels.Message result = Message.CreateMessage(MessageVersion.None, "", reader);
return result;
}
它的工作在我的电脑成功,你可以放置你的
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>
这两个项目目录和你的web服务的根源。
我是面临同样的问题,并采取超过3天,以找出问题。我还要注意的时候我是叫因特网云服务WCF从Silverlight应用程序托管,在另一个网络服务器,它只是显示了跨领域的错误。之后的寻找到一些员额的我没有解决的问题,甚至把cross-domain.xml 和clientaccesspolice.xml 文件服务根目录。所以我只是尝试,而不是使用 http://example.com 我只是改变它的安全 https://example.com 它只是工作的罚款。截域的错误消失。服务是所谓的没有问题。
检查哪些项目是设定缺省值。它应该是网络项目,该项目应该被设置的默认和不控项目。