wcf服务寄宿时,如何指定终结点三要素才不会出错

本文通过多种实验场景详细探讨了WCF服务寄宿时服务契约、绑定和终结点地址的不同组合方式及其效果,包括相同与不同服务契约、绑定及地址的组合,并归纳总结了配置的有效性和限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

wcf中服务寄宿时,怎样指定服务契约、绑定和终结点地址。

情形一:服务契约相同、绑定相同、地址相同

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice");
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice");
serviceHost.Open();
}

实验结果:
这里写图片描述

情形二:相同契约、同一个绑定对象、相同地址

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
WSHttpBinding wsHttpBinding = new WSHttpBinding();
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",wsHttpBinding, "http://127.0.0.1:3721/calculatorservice");
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",wsHttpBinding, "http://127.0.0.1:3721/calculatorservice");
serviceHost.Open();
Console.Read();
}

实验结果:
这里写图片描述

情形三:服务契约相同、绑定相同、地址不同

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice");
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",new WSHttpBinding(), "http://127.0.0.1:3722/calculatorservice");
serviceHost.Open();
 }

实验结果:可以正常寄宿服务,正常启动服务。不管使用哪一个地址都可以正常调用服务。

情形四:相同契约、同一个绑定对象、不同地址

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
 {
WSHttpBinding wsHttpBinding = new WSHttpBinding();
 serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",wsHttpBinding, "http://127.0.0.1:3721/calculatorservice");
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",wsHttpBinding, "http://127.0.0.1:3722/calculatorservice");
serviceHost.Open();
Console.Read();
}

实验结果:可以正常寄宿服务,正常启动服务。不管使用哪一个地址都可以正常调用服务。

情形五:相同契约、不同绑定、不同地址

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice");
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",new NetTcpBinding(), "net.tcp://127.0.0.1:3722/calculatorservice");
serviceHost.Open();
Console.Read();
}

实验结果:可以正常寄宿服务,正常启动服务。不管使用哪一个地址都可以正常调用服务。

情形六:相同契约、不同绑定、相同地址

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice");
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",new NetTcpBinding(), "net.tcp://127.0.0.1:3721/calculatorservice");
serviceHost.Open();
Console.Read();
}

实验结果:
这里写图片描述

情形七:不同契约、相同绑定、相同地址

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice");
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculatorII",new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice");
serviceHost.Open();
Console.Read();
}

实验结果:
这里写图片描述

情形八:不同契约、同一个绑定对象、相同地址

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
WSHttpBinding wsHttpBinding = new WSHttpBinding();
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",wsHttpBinding, "http://127.0.0.1:3721/calculatorservice");
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculatorII",wsHttpBinding, "http://127.0.0.1:3721/calculatorservice");
serviceHost.Open();
Console.Read();
}

实验结果:可以正常寄宿服务,正常启动服务。不管使用哪一个地址都可以正常调用服务。

情形九:不同契约、相同绑定、不同地址

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice");
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculatorII",new WSHttpBinding(), "http://127.0.0.1:3722/calculatorservice");
serviceHost.Open();
Console.Read();
}

实验结果:可以正常寄宿服务,正常启动服务。不管使用哪一个地址都可以正常调用服务。

情形十:不同契约、同一个绑定对象、相同地址

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
WSHttpBinding wsHttpBinding = new WSHttpBinding();
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",wsHttpBinding, "http://127.0.0.1:3721/calculatorservice");
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculatorII",wsHttpBinding, "http://127.0.0.1:3721/calculatorservice");
serviceHost.Open();
Console.Read();
}

实验结果:可以正常寄宿服务,正常启动服务。不管使用哪一个地址都可以正常调用服务。

情形十一:不同契约、不同绑定、相同地址

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
 serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice");
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculatorII",new NetTcpBinding(), "net.tcp://127.0.0.1:3721/calculatorservice");
serviceHost.Open();
Console.Read();
}

实验结果:
这里写图片描述

情形十二:不同契约、不同绑定、不同地址

using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService)))
{
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculator",new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice");
serviceHost.AddServiceEndpoint("Artech.WcfServices.Service.Interface.ICalculatorII",new NetTcpBinding(), "net.tcp://127.0.0.1:3722/calculatorservice");
serviceHost.Open();
Console.Read();
}

实验结果:可以正常寄宿服务,正常启动服务。不管使用哪一个地址都可以正常调用服务。

下面是对实验结果的归纳。
这里写图片描述
可见:
对于同一个服务,不管使用的是相同的绑定还是同一个绑定对象,还是不同的绑定,只要终结点相同,都不能正常寄宿。
对于不同的服务,采用相同的绑定和不同的绑定时,只要终结点地址相同,都不能正常寄宿。但是采用同一个绑定对象时,不管终结点地址相同与否,都正常。

下面再来看一下基地址的情况。
wcf中可以为同一个服务指定一个或者多个基地址,但是不允许为同一个服务的同一种传输协议指定多个基地址。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值