silverlight 调用 webservice到底要怎样才可以

xiaogua 2010-04-18 09:56:56
我的silverlight站点和webservice站点发布在不同的端口上,要如何访问才可以?
调试时总是出现
尝试向 URI“http://localhost:7738/Service1.svc”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送 SOAP 相关的 HTTP 标头。出现此错误也可能是由于使用的是 Web 服务代理中的内部类型而没有使用 InternalsVisibleToAttribute 属性。有关详细信息,请参阅内部异常。
这样的问题。

在网上找了都说是由于跨域而导致的,但是我在我的web根目录下放置了

文件: 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>

却始终还是出现这个问题,我的web调试的目录也改成了"/",究竟要如何才可以调用成功,每次都在异步调用回来END的时候抛错.难道silverlight调用webservice 只支持在同一个域名下面吗,望高手赐教,急!!!!!!!!!!!!!!!
...全文
749 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
putianchengp 2012-10-10
  • 打赏
  • 举报
回复
请问下楼主后来是怎么解决的呢,我新建一个sl项目,把sl设为启动项可以调用svc文件成功,但是设web为启动项,却出现跨域错误,好纠结的问题啊,用了那些方法都行不通了
sciland 2012-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

http://localhost:7738/Service1.svc
这是WCF吧,不是WebService

首先确定 http://localhost:7738/Service1.svc 本身没有错误,用IE能打得开,
其次 clientaccesspolicy.xml 是放置在WCF所在站点的,不是Silverlight所Host的站点
然后 有clientaccesspoli……
[/Quote]
利用这个方法解决了,谢谢
yehZhou 2010-04-22
  • 打赏
  • 举报
回复
当然,SL服务引用文件里的那个endpoint也是要修改成你部署后的访问路径
jv9 2010-04-21
  • 打赏
  • 举报
回复
两个思路:
1. 首先需要明白,Silverlight使用两个域名,需要添加跨域文件到Web项目根目录;

2. 使用Fiddler查看svc链接是否正常访问,HTTP反馈错误信息。这步比较重要。当你发布项目到IIS,SVC访问路径会根据你发布的目录不同而变化。所以会出现无法访问的现象。
yehZhou 2010-04-21
  • 打赏
  • 举报
回复
clientaccesspolicy.xml文件放在所部署网站所属的的主目录下。
例如xp中iis的默认网站的主目录是C:\Inetpub\wwwroot,而你的服务又是部署在默认网站下面的一个虚拟目录里的,则将该文件放置到C:\Inetpub\wwwroot应该就可以了
sky-defender 2010-04-21
  • 打赏
  • 举报
回复
4楼正解
dujingjing1230 2010-04-21
  • 打赏
  • 举报
回复
<system.serviceModel>结点配置你贴出来吧。
另外编译前把Web下生成的那xap文件删掉。
xiaogua 2010-04-21
  • 打赏
  • 举报
回复
我用的是部署好的web service ,是java 的webservice
mengKzhaoyun 2010-04-20
  • 打赏
  • 举报
回复
我的楼上说得都很有道理,我初学Silverlight的时候也不会配置跨域访问策略,到头来原来是根本就不了解DOMAIN是什么,学编程基础真的很重要...
海涵德 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 xiaogua 的回复:]
我的silverlight站点和webservice站点发布在不同的端口上,要如何访问才可以?
调试时总是出现
尝试向 URI“http://localhost:7738/Service1.svc”发出请求时出错。这可能是由于试图以跨域方式访问服务而又没有正确的跨域策略,或策略不适用于 SOAP 服务。您可能需要与该服务的所有者联系,以发布跨域策略文件并确保该文件允许发送 SOAP 相关的 H……
[/Quote]
不要相信那个跨域文件的功能,这种说法属于山寨说法。你的问题出在使用的uri不对,http://localhost:7738/Service1.svc
这是一个虚拟的iis服务,由开发平台自动创建的是为了调试程序的,而且它还经常变化,是不能部署应用的。
你必须通过部署项目部署后才能有意争得WebService访问地址,如:
http://192.168.1.225/myWeb/Service1.svc
尽可以参见我最近发的两个帖子,一个是关于部署问题的一个是关于序列化问题的。



xingjunli 2010-04-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 websco 的回复:]
http://localhost:7738/Service1.svc
这是WCF吧,不是WebService

首先确定 http://localhost:7738/Service1.svc 本身没有错误,用IE能打得开,
其次 clientaccesspolicy.xml 是放置在WCF所在站点的,不是Silverlight所Host的站点
然后 有clientaccesspolicy……
[/Quote]

支持此说
安全策略文件要放在WCF、WebService服务的根目录下
a13750884487 2010-04-20
  • 打赏
  • 举报
回复
用IIS发布 然后http://localhost:7738/Service1.svc修改成你发布的地址
如:http://127.0.0.1/webservice/Service1.svc
然后权限与跨越问题都配置好,应该没有问题。
websco 2010-04-18
  • 打赏
  • 举报
回复
http://localhost:7738/Service1.svc
这是WCF吧,不是WebService

首先确定 http://localhost:7738/Service1.svc 本身没有错误,用IE能打得开,
其次 clientaccesspolicy.xml 是放置在WCF所在站点的,不是Silverlight所Host的站点
然后 有clientaccesspolicy.xml 就不用 crossdomain.xml 了

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧