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

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中可以为同一个服务指定一个或者多个基地址,但是不允许为同一个服务的同一种传输协议指定多个基地址。

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值