在客户端我尝试为我的WCF服务创建代理。
它创造了很酷。但只有小事麻烦我。
我想要的事情和IP地址作为服务名称。但真的有我的机器名称。简言之
我在一代又一代的网站上http://mycomputer/blabla
但我需要这样:http://93.48.56.74/blabla
其中93.48.56.74
是我生成此计算机的计算机的IP地址。
如何解决这个问题?
答案 0 :(得分:2)
它使用您的机器名称的原因是因为这是在生成的WSDL中公布的地址。如评论所示,您只需修改Web.config或App.config,它就会使用IP地址。
这么简单的答案:)
或者,您可以更改WSDL。如果您使用的是.NET 4.0 *,则可以应用
<useRequestHeadersForMetadataAddress>
对您的服务配置的行为。
添加行为后,服务元数据将通告您用于检索WSDL的相同端点地址。因此,如果您向http://93.48.56.74/blabla添加服务引用,则生成的代理和配置应使用IP地址而不是主机名。
*:还有一个适用于.NET 3.5的修补程序:KB971842(不介意修补程序的描述)
答案 1 :(得分:1)
常规方法是使用配置文件为您配置客户端,并根据您的需要指定服务器名称或IP地址。
但据我所知,你正在重新设计服务,要求定期重新配置/更新客户端,在这种情况下,手动更改将被覆盖。
在这种情况下,您有两种方法:
最正确的方法是以编程方式进行初始化。具体取决于您的实现,但这是使用服务EchoService
的示例。它可能会被简化;我已经从测试初始化中复制并粘贴,我需要运行的主机。
public void SetUp()
{
// the service address
var baseAddress = new Uri("http://127.0.0.1:3123/");
host = new WebServiceHost(typeof(EchoService), baseAddress);
ServiceEndpoint sep = host.AddServiceEndpoint(typeof(IEchoService), new WebHttpBinding(), "");
sep.Behaviors.Add(new WebHttpBehavior());
echoFactory = new ChannelFactory<IEchoService>(new WebHttpBinding(), sep.Address);
echoFactory.Endpoint.Behaviors.Add(new WebHttpBehavior());
client = echoFactory.CreateChannel(sep.Address, baseAddress);
}