2011-05-18 103 views
0

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

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

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

http://mycomputer/blabla各种现场发电

后,但我需要这样的:http://93.48.56.74/blabla其中93.48.56.74是我的电脑的IP地址,我产生这个。

如何解决这个问题?

+0

在配置文件中搜索“mycomputer”,并用ip地址替换。 – faester 2011-05-18 07:20:26

+0

在服务器端还是客户端? – alerya 2011-05-18 07:28:12

+0

我在配置文件中将我的机器名称无处不在地改为IP地址。但是在按下'Configure Service Reference ...'后,我遇到了同样的问题。舒尔,每次更新后我都可以在全球进行更换。但它闻起来很难看。 – alerya 2011-05-18 07:31:29

回答

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

常规的方法是使用配置文件来配置你的客户端,并指定服务器名称或IP地址,因为它符合您的需求。

但是从我能告诉你正在重新设计的服务调用定期重新配置/更新客户端,在这种情况下,您的手动更改将被覆盖。

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

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

很有意思 – alerya 2011-05-20 05:19:40