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