為什麼要使用WebService?我的目的是要讓Window AP可以在防火牆外部連接到SQL Server並取得資料。所以建立了WebService當中介介面,不需將SQL Server的服務直接曝露對外。
此例為Window Form透過WebService取得Northwind的Customers資料並填入DataGridView
1. 新增專案 → C# → Web → ASP.Net Web Service應用程式
2. 建立WebMethod
namespace SQLWebService
{
/// <summary>
///Service1 的摘要描述
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允許使用 ASP.NET AJAX 從指令碼呼叫此 Web 服務,請取消註解下一行。
// [System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
[WebMethod]
public DataSet GetDate()
{
SqlConnection connection = new SqlConnection("User ID=sa;password=test;Initial Catalog=Northwind;Data Source=192.168.1.1");
SqlDataAdapter CustDataAdapter = new SqlDataAdapter("SELECT * FROM Customers ORDER BY CustomerID", connection);
DataSet CustDataSet = new DataSet();
connection.Open();
CustDataAdapter.Fill(CustDataSet);
connection.Close();
return CustDataSet;
}
}
}
3. 建置 → 發行 →目標位置先填http://localhost/SQLWebService/ (SQLWebService為自訂路徑,locahost的IIS需正常運作中)
4. IE測試開啟http://localhost/SQLWebService/ ,如下圖畫面表示服務正常
5. 關閉專案
6. 新增一Window Form專案
7. 加入服務參考
8. 位址填入http://localhost/SQLWebService/service1.asmx ,按Enter後,下方會出現服務名稱Service1,填入命名空間,可保持預設名稱ServiceReference1亦可。
9. 編輯程式,需先using 本程式的namespace.本程式的ServiceReference名稱(即上圖的命名空間)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TEST.ServiceReference1;
namespace TEST
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Service1SoapClient MyService = new Service1SoapClient();
this.dataGridView1.DataSource = MyService.GetDate().Tables[0];
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Data.SqlClient;