WCF:控制自托管服务中的服务端点名称

时间:2010-12-27 18:11:11

标签: c# wcf wsdl

我有一个托管在Windows服务中的WCF服务。此服务需要在其中一台用户的计算机上运行,​​并且将由驻留在其他计算机上的客户端应用程序访问。该服务将通过BasicHttpBinding公开。服务器将使用.NET 4.0在C#中实现。客户端将使用.NET 3.5(外部要求)实现。

我已经对服务进行了一些调整,以便将整个WSDL压缩到一个文件中(而不是多个XSD)。例如,描述了这样做的过程。 here

我通过“localhost”端点公开服务,即:

ServiceHost serviceHost = new ServiceHost(serviceInstance, "http://localhost:8080/...");

相对于上述基址,其端点作为URI公开。

我的问题是,当使用VS2010的添加服务引用生成代理时,我得到一个代理,其默认ctor连接到“http:// localhost:8080 / ...”端点。如果服务与客户端托管在同一台机器上(例如在测试期间),这可以正常工作,但是当服务器和客户端机器分开时,显然会失败:客户端机器没有监听“http:// localhost: 8080 / ...“。

WSDL文件包含:

<wsdl:service name="MyService">
    <wsdl:port name="BasicHttpBinding_IMyService" binding="tns:BasicHttpBinding_IMyService">
        <soap:address location="http://localhost:8080/MyService/IMyService" />

当然,我可以使用另一个接收真实主机名的ctor来连接,但鉴于我使用主机的真实地址生成了客户端,我希望客户端能够自动连接到这个端点。

我在几个论坛上看到,我可以使用其主机名或IP,而不是在服务器上使用localhost。但是,主机可能有多个主机名和/或IP,服务不知道选择哪个。

有没有办法让自动生成的代理使用“真实”服务器的地址(如用于创建代理的WSDL URL所示)?

1 个答案:

答案 0 :(得分:0)

无法在App.config中指定&lt; system.serviceModel&gt;部分?也许你可以覆盖端点地址,但你绝对可以覆盖元地址。