标签:
服务类包括服务契约IWCFService、操作契约OperationContract、和数据契约DataContract。
using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel; using System.Text; using System.ServiceModel.Description; using System.Runtime.Serialization; namespace WcfServer { /// <summary> ///服务类 实现接口 /// </summary> public class WcfServer : IWcfService { List<Book> bookList = new List<Book>(); public WcfServer() { Book bk = new Book("琥珀之剑", " 绯炎", " 命运在我眼前分开成两条互不相关笔直的线"); bookList.Add(bk); bk.SetBook("诛仙", "萧鼎", "方今之世,正道大昌,邪魔退避。中原大地山灵水秀,人气鼎盛,物产丰富,为正派诸家牢牢占据。其中尤以“青云门”、“天音寺”、和“焚香谷”为三大支柱,是为领袖。这个故事,便是从“青云门”开始的。"); bookList.Add(bk); } public Book getBookMessageByName(string bookName) { Book bk = new Book(); foreach (var book in bookList) { if (book.bookName == bookName) { Console.WriteLine("返回书本信息成功"); return bk = book; } } return bk; } public bool addBookMessage(Book book) { if (book.getBook() != null) { if (!bookList.Contains(book)) { bookList.Add(book); Console.WriteLine("增加书目{0}", book.bookName); return true; } } return false; } public List<string> getBookNameList() { List<string> bookNameList = new List<string>(); foreach (Book bk in bookList) { Console.WriteLine("返回书籍列表信息成功"); bookNameList.Add(bk.bookName); } return bookNameList; } } /// <summary> /// 服务契约 操作契约 /// </summary> [ServiceContract] public interface IWcfService { [OperationContract] Book getBookMessageByName(string bookName); [OperationContract] bool addBookMessage(Book book); [OperationContract] List<string> getBookNameList(); } /// <summary> /// 数据契约 /// </summary> [DataContract] public struct Book { [DataMember] public string bookName; [DataMember] public string author; [DataMember] public string briefIntroduce; public Book(string bookName, string author, string briefIntroduce) { this.bookName = bookName; this.author = author; this.briefIntroduce = briefIntroduce; } public void SetBook(string bookName, string author, string briefIntroduce) { this.bookName = bookName; this.author = author; this.briefIntroduce = briefIntroduce; } public Book? getBook() { if (string.IsNullOrEmpty(this.bookName)) { return null; } else { return this; } } } }
WCF寄主
using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel; using System.Text; using WcfServer; namespace WCFHost { class Program { static void Main(string[] args) { using (ServiceHost host=new ServiceHost (typeof(WcfServer.WcfServer))) { Uri httpAddress = new Uri("http://localhost:8002/WCFService"); host.AddServiceEndpoint(typeof(WcfServer.IWcfService),new WSHttpBinding(),httpAddress); if (host.State != CommunicationState.Opening) host.Open(); Console.WriteLine("************************"); Console.WriteLine("**** ****"); Console.WriteLine("**** 服务正在运行...****"); Console.WriteLine("**** ****"); Console.WriteLine("************************"); Console.Read(); } } } }
客户端
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Channels; using WcfServer; namespace WCFCliet { class Program { static void Main(string[] args) { IWcfService proxy = ChannelFactory<IWcfService>.CreateChannel(new WSHttpBinding(), new EndpointAddress("http://localhost:8002/WCFService")); Book book = new Book("英雄之国", "象不语", "曾经的英雄们,终已化作夜空下闪耀的点点星芒; 而不屈的后来者,则发誓要追随前人足迹、继承先祖无上的荣光。"); List<string> bookNameList = new List<string>(); while (true) { Console.WriteLine("*****************************"); Console.WriteLine("**** 0: 获取列表 ****"); Console.WriteLine("**** 1:添加书本 ****"); Console.WriteLine("**** 2:根据名字获取信息 ****"); Console.WriteLine("**** 3:退出程序 ****"); Console.WriteLine("*****************************"); ConsoleKeyInfo info = Console.ReadKey(); switch (info.Key) { case ConsoleKey.D0: bookNameList = proxy.getBookNameList(); foreach (string bookName in bookNameList) { Console.WriteLine(); Console.WriteLine(":: {0} ::", bookName); } break; case ConsoleKey.D1: if (proxy.addBookMessage(book)) { Console.WriteLine("添加成功"); } else { Console.WriteLine("添加失败或已存在"); } break; case ConsoleKey.D2: Console.WriteLine("输入书名"); string name = Console.ReadLine(); book = proxy.getBookMessageByName(name); if (book.getBook() != null) { Console.WriteLine("书名: {0}\r\n作者: {1}\r\n简介: {2}",book.bookName,book.author,book.briefIntroduce); } break; case ConsoleKey.D3: Environment.Exit(0); break; default: Console.WriteLine("输入有误,重新输入"); break; } } } } }
运行后:
标签:
原文地址:http://my.oschina.net/hunjixin/blog/505159