Ajax+WCF+MySQL实现数据库部署并调用

         最近的数据库课程要求将MySQL数据库部署在服务器上,参考了大佬们的博客后,总结一下。

        先放上参考的大佬们的博客。

        【原创经验分享】JQuery(Ajax)调用WCF服务 - 南宫萧尘 - 博客园 (cnblogs.com)

          WinForm+WCF+mysql+http实现简单的用户登录注册_小瞄喵的博客-CSDN博客

         未能加载文件或程序集“Renci.SshNet, Version=2016.1.0.0, Culture=neutral, PublicKeyToken=……” - 河耶悦子 - 博客园 (cnblogs.com)        

        一、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。

        编辑

编辑         点击 服务-终结点,修改Name, 在 BindingConfiguration处绑定之前的“绑定”。

编辑

        四、编写WCF服务

        转到VS项目中之前创建的 xxx.svc.cs文件中,添加如下两项。

[JavascriptCallbackBehavior(UrlParameterName ="jsoncallback")]

编辑

[WebGet (ResponseFormat =WebMessageFormat.Json)]

编辑         在 [OperationContract] 下面编写函数。

 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,调用服务

        新建一个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,右键项目,点击发布。选择方法为:文件系统,选择喜欢的目录,设置好后发布,如下图(该图引自WinForm+WCF+mysql+http实现简单的用户登录注册_小瞄喵的博客-CSDN博客

编辑

 目录下会出现如下文件夹。

编辑

         点击 控制面板-系统和安全-管理工具,点击第一个 IIS。

编辑

         右键单击 网站,选择添加网站,确定网站名称,物理路径选择之前发布的目录。

编辑

         点击 连接为,选择 特定用户,输入你的电脑名称和登录密码。

编辑

        如果出现如下情况,检查密码是否错误。如果密码没问题,给电脑新建一个用户,用新建的用户和密码连接。

编辑

        如果连接成功,点击测试设置,应该出现下图。

编辑

         选择IP地址和端口号,点击确定即可。浏览创建的网站,如下图。

编辑

         最后,将HTML文件中的URL地址改为该地址。如图。

编辑

 

        OK,大功告成!

posted @ 2023-01-05 18:01  福元路小佩奇  阅读(73)  评论(0编辑  收藏  举报