文章出處

        上接WCF學習之旅—第三個示例之一(二十七)

              WCF學習之旅—第三個示例之二(二十八)

          在上一篇文章中我們創建了實體對象與接口協定,在這一篇文章中我們來學習如何創建WCF的服務端代碼。具體步驟見下面。

六、創建項目BookMgr.Service的WCF服務代碼

     第一步、安裝Entity Framework 6.1.3

    1)  安裝過程同上一篇文章中類似。使用NuGet下載最新版的Entity Framework 6.1.3。在解決方案資源管理器中——>在項目BookMgr.Service上鼠標右鍵單擊——>彈出一個菜單,選中“管理解決方案的NuGet程序包”,打開NuGet程序包管理界面。如下圖。

        2)      在NuGet程序包管理界面中搜索 Entity,找到最新版本Entity Framework,點擊安裝。如下圖。

   第二步、創建WCF服務代碼

      1)  在“解決方案資源管理器”中使用鼠標右鍵,點擊“BookMgr.Service”項目,在彈出菜單上,依次選擇“添加—》WCF服務”

      2)  在“項名稱”文本框中,輸入 BookService,然后選擇“確定”按鈕。

       3) 刪除同步生成的IBookService接口文件。

       4) 在“解決方案資源管理器中”中,定位BookService.svc.cs文件,雙擊在“代碼編輯器”中打開,并編寫如下代碼。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using BookMgr.Contracts;
using BookMgr.Model;
using BookMgr.Common;
using System.Data.Entity; 

namespace BookMgr.Service
{
    // 注意: 使用“重構”菜單上的“重命名”命令,可以同時更改代碼、svc 和配置文件中的類名“BookService”。
    // 注意: 為了啟動 WCF 測試客戶端以測試此服務,請在解決方案資源管理器中選擇 BookService.svc
// 或 BookService.svc.cs,然后開始調試。
public class BookService :IBookService { BookEntities db = new BookEntities(); public string Add(string mbook) { try { Books book = XMLHelper.DeSerializer<Books>(mbook); db.Books.Add(book); db.SaveChanges(); } catch (Exception ex) { return ex.Message; } return "true"; } public string Delete(string bookInfo) { try { Books book = XMLHelper.DeSerializer<Books>(bookInfo); db.Entry(book).State = EntityState.Deleted; db.SaveChanges(); } catch (Exception ex) { return ex.Message; } return "true"; } public void DoWork() { } public string Edit(string mbook) { try { Books book = XMLHelper.DeSerializer<Books>(mbook); db.Entry(book).State = EntityState.Modified; db.SaveChanges(); } catch (Exception ex) { //這里如果出現異常,則返回一個自定義的錯誤信息,用于進行調試,可以看到更詳細的異常信息,方便定位問題。 string reason = GetErrorMessage(ex); SQLError error = new SQLError("更新數據庫操作", reason); throw new FaultException<SQLError>(error, new FaultReason(reason), new FaultCode("Edit")); } return "true"; } public string Get(string Id) { int bookId = Convert.ToInt32(Id); Books book = db.Books.Find(bookId); string xml = XMLHelper.ToXML<Books>(book); return xml; //throw new NotImplementedException(); } public string Search(string Category, string searchString) { var cateLst = new List<string>(); var cateQry = from d in db.Books orderby d.Category select d.Category; cateLst.AddRange(cateQry.Distinct()); var books = from m in db.Books select m; if (!String.IsNullOrEmpty(searchString)) { books = books.Where(s => s.Name.Contains(searchString)); } List<Books> list = null; if (string.IsNullOrEmpty(Category)) { list = books.ToList<Books>(); //return XMLHelper.ToXML<List<Books>>(list); } else { list = books.Where(x => x.Category == Category).ToList<Books>(); // return XMLHelper.ToXML<IQueryable<Books>>(books.Where(x => x.Category == Category)); } return XMLHelper.ToXML<List<Books>>(list); } StringBuilder sb = new StringBuilder(); /// <summary> /// 遞歸獲取錯誤信息的內部錯誤信息,直到InnerException為null /// </summary> /// <param name="ex"></param> private string GetErrorMessage(Exception ex) { if (ex.InnerException != null) { sb.Append("InnerException:"+ex.Message + ","); GetErrorMessage(ex.InnerException); } else { sb.Append(ex.Message + ","); } return sb.ToString(); } } }

         5)  在“解決方案資源管理器”中從“BookMgr.Model”項目中的“App.Config”文件復制到“BookMgr.Service”項目中。如下圖。

      6)  在菜單欄上,依次選擇“調試”、“開始執行(不調試)”以運行服務。 此時將打開一個瀏覽窗口,并顯示該服務的 XML 架構。如下圖。

        7)  關閉瀏覽器窗口。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()