我尝试为我的WCF服务创建代理。客户端上的代理WCF向导
它创造了很酷。但只有小事让我烦恼。
我想要它的事情有和IP地址作为服务名称。但真的有我的机器名称。简而言之
我http://mycomputer/blabla
各种现场发电
后,但我需要这样的:http://93.48.56.74/blabla
其中93.48.56.74
是我的电脑的IP地址,我产生这个。
如何解决这个问题?
我尝试为我的WCF服务创建代理。客户端上的代理WCF向导
它创造了很酷。但只有小事让我烦恼。
我想要它的事情有和IP地址作为服务名称。但真的有我的机器名称。简而言之
我http://mycomputer/blabla
各种现场发电
后,但我需要这样的:http://93.48.56.74/blabla
其中93.48.56.74
是我的电脑的IP地址,我产生这个。
如何解决这个问题?
它使用机器名称的原因是因为这是在生成的WSDL中公布的地址。正如评论,你可以修改你的Web.config或App.config,它将使用IP地址。
这么简单的答案:) 或者,您可以更改WSDL。如果您使用.NET 4.0 *,则可以将 <useRequestHeadersForMetadataAddress>
行为应用于您的服务配置。
添加行为后,服务元数据将通告您用于检索WSDL的同一端点地址。因此,如果您将服务参考添加到http://93.48.56.74/blabla,则生成的代理和配置应使用IP地址而不是主机名称。
*:还有一个可用于.NET 3.5的修补程序:KB971842(不介意的修补程序的说明)
常规的方法是使用配置文件来配置你的客户端,并指定服务器名称或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);
}
很有意思 – alerya 2011-05-20 05:19:40
在配置文件中搜索“mycomputer”,并用ip地址替换。 – faester 2011-05-18 07:20:26
在服务器端还是客户端? – alerya 2011-05-18 07:28:12
我在配置文件中将我的机器名称无处不在地改为IP地址。但是在按下'Configure Service Reference ...'后,我遇到了同样的问题。舒尔,每次更新后我都可以在全球进行更换。但它闻起来很难看。 – alerya 2011-05-18 07:31:29