我有一个调用wcf服务的silverlight项目。在我的本地机器上一切正常。
但是,当我部署到虚拟机时,wcf服务返回完全相同的查询,但结果为空。
我已经尝试过调试,但是无法让它在wcf服务中破解。
任何想法可能是什么问题,或者我如何调试它?
由于
我弄清楚问题是什么,但我不确定解决方案是什么。
在我的silverlight项目中,我引用的wcf服务是http://localhost/.../SilverlightApiService.svc
我在我的虚拟机上使用fiddler来查看已发出的请求,而不是尝试联系上述服务,它试图联系:
http:///.../SilverlightApiService.svc
因此,出于某种原因我的机器名称被插入到那里而不是localhost。对此有任何想法将不胜感激。
答案 0 :(得分:1)
在部署到amazon ec2时遇到了这个问题 - 服务的机器名称是在wsdl而不是dns中返回的。
有几个解决方案(一个涉及创建静态wsdl - yuck!)
但另一个是为服务创建一种工厂模式
这个帖子(你可以全部阅读,但答案在底部。) http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c7fd51a2-773e-41d4-95a0-244e925597fe/
这种情况的轻微下降是,尽管它有效 - 如果你改变了服务器的位置,你需要记住更新你的配置 - 虽然并不难,但很容易忘记这样做。
答案 1 :(得分:0)
您能再提供一些信息吗?你使用什么样的约束?服务配置和客户端配置是什么样的?你从哪里得到你的数据返回?可能是VM上的服务只是没有获得任何数据? (例如,查询没有请求数据的数据库?)
马克
答案 2 :(得分:0)
我之前已经发生过这种情况。我会尝试这个。将您的起始页面设置为Web服务文件并运行该应用程序。然后将起始页面设置回默认页面。然后更新SL项目中的所有服务器引用。重新编译所有内容并重新发布。这在过去帮助了我很多次。
答案 3 :(得分:0)
我弄清楚问题是什么,但我不确定解决方案是什么。
在我的silverlight项目中,我引用的wcf服务是http://localhost/.../SilverlightService.svc
我在我的虚拟机上使用fiddler来查看已发出的请求,而不是尝试联系上述服务,它试图联系:
的http:///.../SilverlightService.svc
因此,出于某种原因我的机器名称被插入到那里而不是localhost。对此有任何想法将不胜感激。
答案 4 :(得分:0)
我明白了。
基本上我的机器名称是在我的silverlight项目的ServiceReferences.ClientConfig文件中进行了硬编码。
我必须做的是在实例化我的服务客户端时以编程方式指定用于服务引用的url:
System.ServiceModel.EndpointAddress address = new System.ServiceModel.EndpointAddress(new Uri
(Application.Current.Host.Source, "../WebServices/SilverlightService.svc"));
ServiceClient serviceClient = new ServiceClient("BasicHttpBinding_IService", address);