我有一个托管在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所示)?
答案 0 :(得分:0)
无法在App.config中指定&lt; system.serviceModel&gt;部分?也许你可以覆盖端点地址,但你绝对可以覆盖元地址。