首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2014-01-19 
WCF,实现多个协定是怎么写的?一个服务类实现了三个协定:public class MyService:IService1,IService2,ISer

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");

热点排行