一、創建數據服務 1.在“解決方案資源管理器”中,使用滑鼠左鍵選中“WcfService”項目,然後在菜單欄上,依次選擇“項目”、“添加新項”。 2.在“添加新項”對話框中,選擇“Web”節點,然後選擇“WCF 服務”項。 3.在“名稱”文本框中,輸入 BookService,然後選擇“添加”按鈕。 ...
一、創建數據服務
1.在“解決方案資源管理器”中,使用滑鼠左鍵選中“WcfService”項目,然後在菜單欄上,依次選擇“項目”、“添加新項”。
2.在“添加新項”對話框中,選擇“Web”節點,然後選擇“WCF 服務”項。
3.在“名稱”文本框中,輸入 BookService,然後選擇“添加”按鈕。如下圖
4.Visual Studio 2013會同時添加一個IBookService介面文件。這個介面代碼文件中的代碼如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Runtime.Serialization; 5 using System.ServiceModel; 6 using System.Text; 7 8 namespace WcfService 9 { 10 /// <summary> 11 /// 書籍協定 12 /// </summary> 13 [ServiceContract] 14 public interface IBookService 15 { 16 /// <summary> 17 /// 通過Id得到書籍信息 18 /// </summary> 19 /// <param name="Id"></param> 20 /// <returns></returns> 21 [OperationContract] 22 Books GetBook(int Id); 23 24 /// <summary> 25 /// 得到所有書籍 26 /// </summary> 27 /// <returns></returns> 28 [OperationContract] 29 List<Books> GetList(); 30 31 /// <summary> 32 /// 添加書籍 33 /// </summary> 34 /// <param name="books"></param> 35 /// <returns></returns> 36 [OperationContract] 37 int AddBook(Books books); 38 39 40 /// <summary> 41 /// 刪除書籍 42 /// </summary> 43 /// <param name="id"></param> 44 /// <returns></returns> 45 [OperationContract] 46 int delBook(int id); 47 48 /// <summary> 49 /// 修改書籍 50 /// </summary> 51 /// <param name="book"></param> 52 /// <returns></returns> 53 [OperationContract] 54 int editBook(Books book); 55 } 56 }
5. 在“解決方案資源管理器中”中,定位BookService.svc.cs文件,雙擊在“代碼編輯器”中打開,並編寫如下代碼。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Runtime.Serialization; 5 using System.ServiceModel; 6 using System.Text; 7 8 namespace WcfService 9 { 10 /// <summary> 11 /// 書籍服務協定實現 12 /// </summary> 13 public class BookService : IBookService 14 { 15 /// <summary> 16 /// 通過Id得到書籍信息 17 /// </summary> 18 /// <param name="Id"></param> 19 /// <returns></returns> 20 public Books GetBook(int id) 21 { 22 using ( BookShopPlusEntities book = new BookShopPlusEntities()) 23 { 24 try 25 { 26 var books = (from s in book.Books 27 where s.Id == id 28 select s).SingleOrDefault(); 29 //var bookss = book.Books.Where(e => e.Id == Id).SingleOrDefault(); 30 return books as Books; 31 } 32 catch (Exception ex) 33 { 34 throw ex; 35 } 36 } 37 } 38 39 /// <summary> 40 /// 得到所有書籍 41 /// </summary> 42 /// <returns></returns> 43 public List<Books> GetList() 44 { 45 using (BookShopPlusEntities book = new BookShopPlusEntities()) 46 { 47 try 48 { 49 var books = from b in book.Books select b; 50 return books as List<Books>; 51 } 52 catch (Exception ex) 53 { 54 throw ex; 55 } 56 } 57 } 58 59 /// <summary> 60 /// 添加書籍 61 /// </summary> 62 /// <param name="books"></param> 63 /// <returns></returns> 64 public int AddBook(Books books) 65 { 66 using (BookShopPlusEntities book = new BookShopPlusEntities()) 67 { 68 try 69 { 70 book.Books.Add(books); 71 //保存到資料庫 72 return book.SaveChanges(); 73 } 74 catch (Exception ex) 75 { 76 throw ex; 77 } 78 } 79 } 80 81 /// <summary> 82 /// 刪除書籍 83 /// </summary> 84 /// <param name="id"></param> 85 /// <returns></returns> 86 public int delBook(int id) 87 { 88 using (BookShopPlusEntities book = new BookShopPlusEntities()) 89 { 90 try 91 { 92 var books = book.Books.Where(e => e.Id == id).SingleOrDefault(); 93 book.Books.Remove(books); 94 return book.SaveChanges(); 95 } 96 catch (Exception ex) 97 { 98 throw ex; 99 } 100 } 101 } 102 103 /// <summary> 104 /// 修改書籍 105 /// </summary> 106 /// <param name="books"></param> 107 /// <returns></returns> 108 public int editBook(Books books) 109 { 110 using (BookShopPlusEntities book = new BookShopPlusEntities()) 111 { 112 try 113 { 114 //得到一條數據 115 var bk = book.Books.Where(e => e.Id == books.Id).SingleOrDefault(); 116 //進行修改 117 bk.Title = books.Title; 118 bk.Author = books.Author; 119 bk.PublishDate = books.PublishDate; 120 bk.UnitPrice = books.UnitPrice; 121 bk.TOC = books.TOC; 122 bk.Publishers.Name = books.Publishers.Name; 123 //提交 124 return book.SaveChanges(); 125 126 } 127 catch (Exception ex) 128 { 129 throw ex; 130 } 131 } 132 } 133 } 134 }
6. 在菜單欄上,依次選擇“調試”、“開始執行(不調試)”以運行服務。
7.打開一個瀏覽視窗,把地址(http://localhost:64501/BookService.svc)輸入到游覽器,然後按 Enter 鍵,可以看到該服務的 XML 架構。
8. 關閉瀏覽器視窗。
二、創建宿主程式
1.WCF服務需要依存一個運行著的進程(宿主),服務寄宿就是為服務指定一個宿主的過程。
2.在菜單欄上,依次選擇“文件-->新建-->項目”,或者如下圖在“解決方案資源管理器”中使用滑鼠右鍵,彈出快捷菜單。
3.在“添加新項目”對話框中,展開 “Visual C#”和“Windows”節點,然後選擇“控制台應用程式”模板。 在“名稱”文本框中,輸入 Hosting,然後選擇“確定”按鈕。 如下圖。
4.我們可以通過代碼的方式完成所有的服務寄宿工作。在“解決方案資源管理器中”中,定位到Program.cs文件,雙擊在“代碼編輯器”中打開,並編寫如下代碼。下麵的代碼通過一個控制台應用對 BookService的寄宿的實現。關於配置方式參見前一文章。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using WcfService; 7 using System.ServiceModel; 8 using System.ServiceModel.Description; 9 10 namespace Hosting 11 { 12 class Program 13 { 14 static void Main(string[] args) 15 { 16 //沒有通過配置文件的方式啟動程式 17 18 //提供服務的主機 19 using (ServiceHost host = new ServiceHost(typeof(BookService))) 20 { 21 //添加終結點 22 host.AddServiceEndpoint(typeof(BookService),new WSHttpBinding(),"http://127.0.0.1:9898/BookService"); 23 //判斷控制服務元數據和相關信息的發佈 24 if(host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null) 25 { 26 //創建一個控制服務 27 ServiceMetadataBehavior metdata = new ServiceMetadataBehavior(); 28 //控制服務元數據和相關信息的發佈時使用Http/Get進行檢索 29 metdata.HttpGetEnabled = true; 30 //http/Get請求的位置 31 metdata.HttpGetUrl = new Uri("http://127.0.0.1:9898/BookService/wcf"); 32 //添加到主機中 33 host.Description.Behaviors.Add(metdata); 34 } 35 //添加一個事件 36 host.Opened += delegate 37 { 38 Console.WriteLine("BookService已啟動,按任意鍵終止服務!"); 39 }; 40 //啟動服務 41 host.Open(); 42 43 Console.ReadLine(); 44 } 45 } 46 } 47 }
在接下來的步驟中,將創建一個 控制台應用程式以使用該服務。