所以,我是WCF的新手......
我创建了使用ServiceLibrary的ServiceLibrary和Web站点项目。我可以通过使用svcutil.exe生成的WSDL创建代理类来访问该服务,然后使用此类访问我的服务中的方法。所有这些在我的本地机器上都很好。
然后我将服务移至我的测试开发服务器(不在域上,因此我通过IP地址访问)并将该站点添加到IIS。我能够通过//ip/ServiceSite/Service.svc访问该服务,并通过//ip/ServiceSite/Service.svc?wsdl访问WSDL。
但是,在尝试使用此服务时,我收到有关引用不正确的错误。当我查看//ip/ServiceSite/Service.svc时,为生成代理类而提供的链接包含地址中服务器的机器名,当我查看WSDL时,对模式的引用也包含机器名称 在URL中。无法通过网络访问此计算机名称,因为它不在域中。
有没有办法代替服务器的机器名称而不是它将使用IP地址的那些引用?或者是否有其他解决方案能够通过IP地址访问服务?
答案 0 :(得分:10)
放
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
在关闭system.serviceModel标记之前。它应该像这样结束:
<system.serviceModel >
.
.
.
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel >
答案 1 :(得分:2)
查看WCFExtras库。特别是,“覆盖SOAP地址位置URL”一节。简要回答是您需要通过实现IWsdlExportExtension.ExportEndpoint提供的自定义端点行为。
答案 2 :(得分:1)
我想我可能找到了一个解决方案,即将IIS站点绑定更改为IP地址。我仍然不明白为什么这不能成为.config文件中的设置。
以下是我找到的解决方案的链接(http://blogs.msdn.com/wenlong/archive/2007/08/02/how-to-change-hostname-in-wsdl-of-an-iis-hosted-service.aspx)。
以下是我的帖子中有关查找解决方案的链接(WCF (hosting service in IIS) - machine name automattically being picked up by WCF rather than IP?)。