前段時間一直在學習WCF,匆匆忙忙的把《WCF全面解析》和《WCF服務編程》看了一遍,好多東西都不是很懂,又聽了一下WCF分佈式開發的網絡教程,算是馬馬虎虎的明白點了。回顧了一下Webservice,將兩者進行比較學習。考慮到之後的發展,當時決定學習WCF,但願本身在不久的未來能將WCF學的稍微精通點吧。這幾天又將Webservice看了一遍,回想當時學習Webservice到處碰到坑,因爲沒人指點,連最基本地點發布都折騰好長時間,只能一點一點的填坑跳坑。這幾天閒了,想寫一個簡單的Webservice,但願能給當時和我同樣的人有所幫助,也當給本身作個筆記。簡單的demo,大牛能夠繞道了,食品追溯。web
先寫個WinForm調用的模擬服務的,下篇寫個WebForm下AJAX調用的。數據庫
首先,新建一個空的web應用程序。文件—>新建—>項目,選擇Web下的ASP.NET 空 Web 應用程序。取名:MyWeb,以下圖:編程
肯定網絡
再添加Web服務,添加—>新建項—>Web—>Web 服務,取名:MyService.asmx。以下圖:分佈式
添加Web服務完成學習
在這裏,模擬一個服務,相似於經過生日查詢上輩子是誰的的測試。數據庫添加點簡單的數據,以下圖:測試
這裏偷懶,我用EF了。添加—>新建項—>數據—>ADO.NET 實體數據模型,取名:DB.edmx。以下圖: 網站
數據表已經建好了,選擇從數據庫生成,以下圖:ui
下一步,鏈接屬性spa
接着下一步
選擇WhoAreYou表,完成
在服務端寫服務,這裏只簡單些個獲取名字的方法。服務端代碼:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Services; 6 7 namespace MyWeb 8 { 9 /// <summary> 10 /// MyService 的摘要說明 11 /// </summary> 12 [WebService(Namespace = "http://tempuri.org/")] 13 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 14 [System.ComponentModel.ToolboxItem(false)] 15 // 若要容許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消註釋如下行。 16 // [System.Web.Script.Services.ScriptService] 17 public class MyService : System.Web.Services.WebService 18 { 19 muyiEntities db = new muyiEntities(); 20 // 問:請用一句話概況你的職業 21 // 答:Hello World 22 [WebMethod] 23 public string HelloWorld() 24 { 25 return "Hello World"; 26 } 27 28 // Description是對服務方法的描述介紹 29 [WebMethod(Description = "模擬根據生日測試你上輩子是誰?")] 30 public string WhoAreYou(string birthday) 31 { 32 // 根據客戶端提供的生日,查詢數據庫,查出對應的人。 33 List<WhoAreYou> who = db.WhoAreYou.Where(u => u.Birthday == birthday).ToList(); 34 // 本例模擬一個生日只對應一我的 35 WhoAreYou you = who[0]; 36 //返回對應人名字 37 return you.Name; 38 } 39 } 40 }
寫好之後,咱們要發佈到IIS上,先創建一個空網站。打開IIS,網站—>添加網站,輸入IP、端口。這裏有兩個坑。首先,網站的名稱要和發佈的web服務名稱一致,否則報錯,在發佈服務時提示沒有MyService的站點。第二,應用程序池要選擇程序集4.0,若是是2.0,會提示錯誤。這是當時我作的時候遇到的兩個坑。
創建好空站點後,咱們將寫好的web服務發佈到這裏。首先生成一下,發佈。將Web服務發佈到咱們剛在創建的網站。
發佈成功後瀏覽網站
報錯,沒有添加默認文檔
添加默認文檔
雙擊打開,右鍵—>添加,或點擊右上角的添加,錄入服務的名字
瀏覽,成功
好了,如今能夠調用服務了。爲了區別,從新新建一個winform窗體項目
添加服務引用
在地址欄中填入Web服務地址,在這裏注意命名空間,這裏改成了MWS,是客戶端調用服務的命名空間。
引用成功後,在引用文件夾下多出來了MWS,以下圖:
打開窗體,後臺,咱們開始寫客戶端的調用代碼。
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 using WEBFORM.MWS; 11 12 namespace WEBFORM 13 { 14 public partial class FormHello : Form 15 { 16 public FormHello() 17 { 18 InitializeComponent(); 19 } 20 21 private void btnTest_Click(object sender, EventArgs e) 22 { 23 if (txtBirthday.Text.Trim() == "") 24 { 25 MessageBox.Show("請輸入生日"); 26 return; 27 } 28 string birthday = txtBirthday.Text; 29 MyServiceSoapClient ws = new MyServiceSoapClient(); 30 txtName.Text = ws.WhoAreYou(birthday); 31 } 32 } 33 }
F5運行
點擊測試按鈕
結束語:Stay Hungry. Stay Foolish.