我正在使用VSTS2008 + C#+ .Net 3.5开发由IIS托管的WCF服务。我发现当使用Add Service Reference ...从客户端引用服务时,客户端必须能够将机器名称解析为IP地址,因为WSDL按机器名称引用某些模式文件。下面是WSDL文件的一部分示例,为了从客户端解析WSDL文件以生成代理,我们必须能够将机器名testmachine1解析为相关的IP地址,
<xsd:import schemaLocation="http://testmachine1/service.svc?xsd=xsd1"
namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
我的问题是,由于某种原因,机器名称无法一直解析(出于非技术原因),所以我想绑定到托管IIS服务器的IP地址。可能吗?如果是,请欣赏,如果有人可以提供建议。这是我当前的WCF web.config文件,我想知道如何修改它以使其能够使用IP地址,
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service behaviorConfiguration="Foo.WCF.ServiceBehavior"
name="Foo.WCF.CustomerManagement">
<endpoint address="" binding="basicHttpBinding"
contract="Foo.WCF.ICustomerManagement">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Foo.WCF.ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
提前谢谢,
乔治
答案 0 :(得分:2)
如果您的WCF服务托管在IIS中,则无法设置单独的地址。您必须使用SVC文件所在的虚拟目录的URL - 使用计算机名称(http://yourserver/virtualdir/myservice.svc)或IP(http://123.123.123.123/virtualdir/myservice.svc)。
如果您使用IP添加服务引用,那么该IP将在服务导入生成的WSDL中使用。
如果您自己托管WCF服务(Windows服务,控制台应用程序),则可以在config中设置服务地址,并为计算机使用计算机名称或IP。
马克
答案 1 :(得分: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)。
以下是关于我的问题(.NET WCF service references use server name rather than IP address causing issues when consuming)的帖子的链接。
以下是我的帖子中有关查找解决方案的链接(WCF (hosting service in IIS) - machine name automattically being picked up by WCF rather than IP?)。