最近的資料庫課程要求將MySQL資料庫部署在伺服器上,參考了大佬們的博客後,總結一下。 先放上參考的大佬們的博客。 【原創經驗分享】JQuery(Ajax)調用WCF服務 - 南宮蕭塵 - 博客園 (cnblogs.com) WinForm+WCF+mysql+http實現簡單的用戶登錄註冊_小 ...
最近的資料庫課程要求將MySQL資料庫部署在伺服器上,參考了大佬們的博客後,總結一下。
先放上參考的大佬們的博客。
一、VS2019下載WCF組件
進入到 C:\Program Files (x86)\Microsoft Visual Studio\Installer 文件夾下,打開 vs_installer.exe。修改VS2019,點擊單個組件,搜索WCF並下載安裝。
二、 新建WCF項目
新建VS項目,選擇WCF服務應用程式。將IService.cs、Service.svc刪除(如果你不需要的話)。
添加新建項,選擇WCF服務(支持Ajax)。
三、配置Web.config參數
打開Web.config,配置Forms身份驗證。
<authentication mode="Forms"/>
右鍵單擊 Web.config,選擇 編輯WCF配置。
右鍵單擊 綁定,新建綁定配置。
選擇 webHttpBinding,修改 配置-Name,將 常規-CrossDomainScriptAcessEnabled 設為 True。
四、編寫WCF服務
轉到VS項目中之前創建的 xxx.svc.cs文件中,添加如下兩項。
[JavascriptCallbackBehavior(UrlParameterName ="jsoncallback")]
[WebGet (ResponseFormat =WebMessageFormat.Json)]
public string First() { return "OK"; } [OperationContract] [WebInvoke(Method ="GET",BodyStyle =WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] /*有參數*/ public string Second(string name) { string msg = string.Format("{0}success",name); return msg; }
現在,保存項目,右鍵 svc文件,在瀏覽器中查看。
出現如下網頁,說明前面沒啥問題。
新建一個HTML文件,其中,getJSON的URL鏈接為上圖出現的。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title></title> <script src="js/jquery-1.8.3.min.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> function fGetWCF() { $.getJSON("http://localhost:8849/dataService.svc/First?jsoncallback=?", function (data) { alert(data); var vData = JSON.stringify(data); alert(vData); }); } function fGetWCF2() { $.getJSON("http://localhost:8849/dataService.svc/Second?jsoncallback=?", { name: '福元路小佩奇' }, function (data) { alert(data); var vData = JSON.stringify(data); alert(vData); }); } </script> </head> <body> <input type="button" name="wcf" id="wcf" value="無參數調用WCF測試" onclick="fGetWCF()" /> <input type="button" name="wcf" id="wcf" value="有參數調用WCF測試" onclick="fGetWCF2()" /> </body> </html>
點擊按鈕,均有alert彈窗出現。
運行HTML文件沒反應的,在同級目錄下新建js文件夾,去網上下載 jquery-1.8.3.min.js放進來。因為有一句 src="js/jquery01.8.3-min.js"
六、WCF連接MySQL
下載 MySQL.Data.DLL(百度),右鍵項目-添加-引用,將下載的MySQL.Data.DLL加進去。
添加如下引用。
using MySql.Data; using MySql.Data.MySqlClient; using System.Data;
配置MySQL,並創建連接。
const string sqlconfig = "Server=localhost;Port=3306;Uid=root;Pwd=11111;Database=html1"; MySqlConnection connection = new MySqlConnection(sqlconfig);
編寫相應函數,完整svc.cs代碼如下。
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Activation; using System.ServiceModel.Web; using System.Text; using MySql.Data; using MySql.Data.MySqlClient; using System.Data; namespace databaseExport { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] [JavascriptCallbackBehavior(UrlParameterName ="jsoncallback")] public class dataService { // 格式轉換:DataSet->JSON public string DataTableToJSON(DataTable dt) { StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.Append("{\"Name\":\"" + dt.TableName + "\",\"Rows"); jsonBuilder.Append("\":["); for (int i = 0; i < dt.Rows.Count; i++) { jsonBuilder.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { jsonBuilder.Append("\""); jsonBuilder.Append(dt.Columns[j].ColumnName); jsonBuilder.Append("\":\""); jsonBuilder.Append(dt.Rows[i][j].ToString().Replace("\"", "\\\"")); jsonBuilder.Append("\","); } jsonBuilder.Remove(jsonBuilder.Length - 1, 1); jsonBuilder.Append("},"); } jsonBuilder.Remove(jsonBuilder.Length - 1, 1); jsonBuilder.Append("]"); jsonBuilder.Append("}"); return jsonBuilder.ToString(); } public string DataSetToJSON(DataSet ds) { StringBuilder json = new StringBuilder(); json.Append("{\"Tables\":"); json.Append("["); foreach (System.Data.DataTable dt in ds.Tables) { json.Append(DataTableToJSON(dt)); json.Append(","); } json.Remove(json.Length - 1, 1); json.Append("]"); json.Append("}"); return json.ToString(); } // 在此處添加更多操作並使用 [OperationContract] 標記它們 [OperationContract] [WebGet (ResponseFormat =WebMessageFormat.Json)] /*無參數*/ public string First() { const string sqlconfig = "Server=localhost;Port=3306;Uid=root;Pwd=111111;Database=html1"; MySqlConnection connection = new MySqlConnection(sqlconfig); connection.Open(); string sql = "SELECT * FROM test1"; MySqlDataAdapter adapter = new MySqlDataAdapter(sql, connection); DataSet ds = new DataSet(); adapter.Fill(ds); connection.Close(); return DataSetToJSON(ds); } [OperationContract] [WebInvoke(Method ="GET",BodyStyle =WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] /*有參數*/ public string Second(string name) { string msg = string.Format("{0}success",name); return msg; } } }
點擊 工具-NuGet包管理器-程式包管理器控制台,運行如下命令,下載Renci.Ssh.NET.dll
NuGet\Install-Package SSH.NET -Version 2016.1.0
跟前面一樣,在瀏覽器中跑一下WCF服務,打開之前的HTML,點擊 無參數調用WCF測試 ,出現如下內容,說明已經讀取到資料庫中內容。
七、部署IIS
打開控制面板-程式-啟用或關閉Windows功能,勾選並確定。
進入VS,右鍵項目,點擊發佈。選擇方法為:文件系統,選擇喜歡的目錄,設置好後發佈,如下圖(該圖引自
目錄下會出現如下文件夾。