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

来源:互联网 发布:狸窝转换器mac版 编辑:程序博客网 时间:2024/05/20 11:51

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 0
原创粉丝点击