读书人

WCF实现多个协定是如何写的

发布时间: 2014-01-19 01:28:51 作者: rapoo

WCF,实现多个协定是怎么写的?
一个服务类实现了三个协定:


public class MyService:IService1,IService2,IService3
{
string IService1.TestMethod1()
{
return "协定1";
}
string IService2.TestMethod2()
{
return "协定2";
}
string IService3.TestMethod3()
{
return "协定3";
}
}

寄宿服务的时候,添加了三个终结点。如下:

class Program
{
static void Main(string[] args)
{
//创建一个URI对象,用来保存服务的基址
Uri baseAddress = new Uri("http://localhost:8000/MyService");
//创建一个ServiceHost对象。也就是服务主机
ServiceHost selfHost = new ServiceHost(typeof(MyService), baseAddress);
try
{
//添加三个服务终结点
selfHost.AddServiceEndpoint(typeof(IService1), new WSHttpBinding(), "MyService");
selfHost.AddServiceEndpoint(typeof(IService2), new WSHttpBinding(), "MyService");
selfHost.AddServiceEndpoint(typeof(IService3), new WSHttpBinding(), "MyService");
//启用元数据交换
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
//启动服务
selfHost.Open();
Console.WriteLine("服务已准备就绪");
Console.WriteLine("按下回车键以终止服务");
Console.WriteLine();
Console.ReadLine();
//关闭ServiceHostBase以关闭服务
selfHost.Close();
}
catch (CommunicationException ce)
{
Console.WriteLine("异常:{0}", ce.Message);
selfHost.Abort();
}
}
}


但是,运行托管程序的时候,就报错了,请问下,上面的寄宿该怎么写呢?
[解决办法]

三个终结点要共享相同的 ListenUri,则它们必须也共享相同的绑定对象实例。
修改如下:
try {
//添加三个服务终结点
WSHttpBinding binding = new WSHttpBinding();
selfHost.AddServiceEndpoint(typeof(IService1), binding, "MyService");
selfHost.AddServiceEndpoint(typeof(IService2), binding, "MyService");
selfHost.AddServiceEndpoint(typeof(IService3), binding, "MyService");

读书人网 >C#

热点推荐