代理WCF向导

时间:2011-05-18 07:18:50

标签: wcf proxy client generator

在客户端我尝试为我的WCF服务创建代理。

它创造了很酷。但只有小事麻烦我。

我想要的事情和IP地址作为服务名称。但真的有我的机器名称。简言之

我在一代又一代的网站上http://mycomputer/blabla

但我需要这样:http://93.48.56.74/blabla其中93.48.56.74是我生成此计算机的计算机的IP地址。

如何解决这个问题?

2 个答案:

答案 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地址。

但据我所知,你正在重新设计服务,要求定期重新配置/更新客户端,在这种情况下,手动更改将被覆盖。

在这种情况下,您有两种方法:

  • 您可以通过编程方式初始化客户端并设置参数(包括服务URL)。
  • 您可以选择覆盖主机文件中的服务器名称,将其指向所需的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);
    }