a. 服务端 1.契约 使用了继承 using System; using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Host { [ServiceContract] public interface IHuman { [OperationContract] string HumanSay(); } [ServiceContract] public interface IMan : IHuman { [OperationContract] string ManSay(); } [ServiceContract] public interface IWoman : IHuman { [OperationContract] string WomanSay(); } } 2.服务实现 实现了自己的具体的接口 using System; using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Host { public class ManService : IMan { public string HumanSay() { return " 我是人,我会思考!"; } public string ManSay() { return "我是男人,我力气比较大!"; } } public class WomanService : IWoman { public string HumanSay() { return " 我是人,我会思考!"; } public string WomanSay() { return "我是女人,我爱漂亮!"; } } } 3.服务终结点配置 <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <service name="WCF.Chapter2.InheritanceReworked.Host.ManService" behaviorConfiguration="MEX"> <host> <baseAddresses> <add baseAddress="http://localhost:8000"/> </baseAddresses> </host> <endpoint address="http://localhost:8001/Man" binding="basicHttpBinding" contract="WCF.Chapter2.InheritanceReworked.Host.IMan"></endpoint> </service> <service name="WCF.Chapter2.InheritanceReworked.Host.WomanService" behaviorConfiguration="MEX"> <host> <baseAddresses> <add baseAddress="http://localhost:9000"/> </baseAddresses> </host> <endpoint address="net.tcp://localhost:9001/Woman" binding="netTcpBinding" contract="WCF.Chapter2.InheritanceReworked.Host.IWoman"></endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="MEX"> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration> 4.服务寄宿开启 using System; using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Host { class Program { static void Main(string[] args) { using (ServiceHost hostMan = new ServiceHost(typeof(ManService))) { hostMan.Opened += delegate { Console.WriteLine("Man服务已开启..."); }; hostMan.Open(); using (ServiceHost hostWoman = new ServiceHost(typeof(WomanService))) { hostWoman.Opened += delegate { Console.WriteLine("Woman服务已开启..."); }; hostWoman.Open(); Console.ReadLine(); } Console.WriteLine("Woman服务已关闭..."); Console.ReadLine(); } Console.WriteLine("Man服务已关闭..."); } } } b. 客户端 1.客户端等效契约 除了命名空间不一样其他的都一样 using System; using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Client { [ServiceContract] public interface IHuman { [OperationContract] string HumanSay(); } [ServiceContract] public interface IMan : IHuman { [OperationContract] string ManSay(); } [ServiceContract] public interface IWoman : IHuman { [OperationContract] string WomanSay(); } } 2.人类代理 男人和女人在服务端都实现了他,所以既可以是男人代表人,也可以是女人去代表人 using System; using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Client { public class HumanProxy : ClientBase<IHuman>, IHuman { public HumanProxy() { } public HumanProxy(string configurationName) : base(configurationName) { } public string HumanSay() { return base.Channel.HumanSay(); } } } 3.由2的结论这里给出终结点配置 <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <client> <endpoint name="human_man" address="http://localhost:8001/Man" binding="basicHttpBinding" contract="WCF.Chapter2.InheritanceReworked.Client.IHuman"></endpoint> <endpoint name="man" address="http://localhost:8001/Man" binding="basicHttpBinding" contract="WCF.Chapter2.InheritanceReworked.Client.IMan"></endpoint> <endpoint name="human_woman" address="net.tcp://localhost:9001/Woman" binding="netTcpBinding" contract="WCF.Chapter2.InheritanceReworked.Client.IHuman"></endpoint> <endpoint name="woman" address="net.tcp://localhost:9001/Woman" binding="netTcpBinding" contract="WCF.Chapter2.InheritanceReworked.Client.IWoman"></endpoint> </client> </system.serviceModel> </configuration> 3.manProxy using System; using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Client { public class ManProxy : ClientBase<IMan>, IMan { public ManProxy() { } public ManProxy(string configurationName) : base(configurationName) { } public string HumanSay() { return base.Channel.HumanSay(); } public string ManSay() { return base.Channel.ManSay(); } } } 4.womenproxy using System; using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked.Client { public class WomanProxy : ClientBase<IWoman>, IWoman { public WomanProxy() { } public WomanProxy(string configurationName) : base(configurationName) { } public string HumanSay() { return base.Channel.HumanSay(); } public string WomanSay() { return base.Channel.WomanSay(); } } } 5.客户端调用代理 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WCF.Chapter2.InheritanceReworked.Client { class Program { static void Main(string[] args) { using (HumanProxy humanProxy_man = new HumanProxy("human_man")) { Console.WriteLine("humanProxy_man:"); Console.WriteLine(humanProxy_man.HumanSay()); Console.WriteLine(""); } using (HumanProxy humanProxy_woman = new HumanProxy("human_woman")) { Console.WriteLine("humanProxy_woman:"); Console.WriteLine(humanProxy_woman.HumanSay()); Console.WriteLine(""); } using (ManProxy manProxy = new ManProxy("man")) { Console.WriteLine("manProxy_human:"); Console.WriteLine(manProxy.HumanSay()); Console.WriteLine(""); Console.WriteLine("manProxy_man:"); Console.WriteLine(manProxy.ManSay()); Console.WriteLine(""); } using (WomanProxy womanProxy = new WomanProxy("woman")) { Console.WriteLine("womanProxy_human:"); Console.WriteLine(womanProxy.HumanSay()); Console.WriteLine(); Console.WriteLine("womanProxy_woman:"); Console.WriteLine(womanProxy.WomanSay()); Console.WriteLine(); } Console.ReadLine(); } } }