我创建了一个简单的Silverlight应用程序,其中一个Web服务调用了一个数据库,并让它在我的开发计算机上运行。
当我将Web服务项目发布到IIS,在同一台计算机上,并使用http://localhost/SilverlightTest/从IIS访问Silverlight应用程序时,我可以在页面中看到Silverlight,但是对Web服务的调用不是工作
所以我在几个地方添加了文件clientaccesspolicy.xml。所有说明都说将它放在根目录中,所以我尝试了:
c:\ inetpub / wwwroot \无效
c:\ webs \ SilverlightTest \这是我发布Web服务项目的文件夹,包括xap文件。但没有工作
c:\ webs \只是一个猜测,但那不起作用。
然后,在VS中,我将文件添加到Web服务项目中,并将其添加到存储Web服务项目的文件夹中:c:\ work \ Silverlight \ TestWCF \ TestWCF.Web \。当我在IIS中从Firefox打开页面时,对Web服务的调用现在起作用了。显然,Silverlight应用程序在我的开发文件夹中调用Web服务,而不是IIS虚拟目录中的服务c:\ webs \ SilverlightTest \(当我从另一台计算机打开页面时,他对Web服务的调用不起作用工作组)/
为什么Silverlight应用程序会在开发文件夹中调用Web服务? Web服务不应该位于发布它的虚拟目录中吗?我该如何解决这种混乱?
以下是我的ServiceReferences.ClientConfig文件中的配置
<client>
<endpoint address="http://dellnov2006:2753/SimpleWCF.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ISimpleWCF" contract="SimpleWCF.ISimpleWCF"
name="BasicHttpBinding_ISimpleWCF" />
非常感谢任何有关文章的帮助,解释或指示。将非常感谢一篇解释Silverlight应用如何调用Web服务的文章。
由于
迈克·托马斯答案 0 :(得分:1)
在配置文件中,端点地址为http://dellnov2006:2753/SimpleWCF.svc 所以看来你正试图连接到那个地址。
在发布应用程序之前,您必须将该地址修改为 http://localhost/Service/SimpleWCF.svc 或其他指向您服务的内容。
clientaccesspolicy.xml 必须位于** c:\ inetpub \ wwwroot **但是,只有当您从不同的主机访问该服务时才需要此文件。如果您想在本地iis上使用localhost,我认为您不需要它。
答案 1 :(得分:0)
ClientConfig中的地址是您“添加服务引用”的服务的地址。正如你所注意到的,它不是一条相对路径。要覆盖此行为,请在服务客户端的构造函数中指定地址的URI。
另外,你真的需要提琴手。你会爱上它的。它有助于解决这些问题以及跨域问题。
答案 2 :(得分:0)
非常感谢djjoyro。你是对的。将配置文件更改为:
endpoint address =“http://MachineName/SilverlightTest/SimpleWCF.svc”binding =“basicHttpBinding” bindingConfiguration =“BasicHttpBinding_ISimpleWCF”contract =“SimpleWCF.ISimpleWCF” name =“BasicHttpBinding_ISimpleWCF”
工作,没有客户端访问策略文件。当我从工作组中的其他计算机访问Silverlight应用程序时,这也很有用。
我也尝试使用localhost而不是计算机名,但我确实必须使用clientaccesspolicy文件,而在工作组中使用其他计算机时我无法访问Web服务。
我还需要了解更多这方面的知识,但至少部署工作经过几天的努力才能实现。
迈克·托马斯答案 3 :(得分:0)
晚会,但我要补充一点,如果您的绑定地址包含端口号,那么您仍在使用Visual Studio Web服务器。 http://dellnov2006:2753是一个死的赠品,你仍然使用VS Web服务器,而不是你想要的IIS。