• Web服务小试牛刀


    写文章喽~

    楔子:

    为么我会误打误撞的学了一下午WebService呢,因为我要交一个公选课作业。而这个公选课啊,本身本屌是没选上的。选了一个别的,后来,那个任课老师(我们专业的),希望我们选他的课。就开始跑教务处给我们调,本来说是调不过来了,但是就在这个公选课结课前三天,也就是昨天,我才知道。。奶奶的,我有了这门课,而且是和之前的那个课共存的,一个学期一个学生原则上是只能选一门课的。但是这样一开我发现自己要交两门公选作业,而这个的作业就是从2012“齐鲁软件设计大赛”选一个。思来想去,就选了这个最速成的WebService,为么说他是最速成的呢,因为其他的比如J2ME啊 android开发啊WP7的搭建环境太麻烦。。。。

    正文:

    还得交这个的报告,干脆先写博客抒发一下了

    正正文:

    这里所做的呢,就是自己写一个web service 然后在自己的网页和winform中调用。我没有发布,只是用的本机的虚拟路径,然后在同一个解决方案里引用的。

    是以股票价格为例的,也就是你发布一个Web服务吧(股价),别人在自己的网页里可以引用,在自己的windowsForm里也可以。

    话不多说,上教程啊

    第一步:

    建立一个空的解决方案

    然后想这个空的解决方案添加一个asp.net Web服务,注意,这个地方要选.net framework2.0.不选2.0的话容易遇到兼容性问题,所以建议选择2.0 。

    然后,现在添加数据库 我把它叫做bankDB.mdf

    然后打开试图里的“服务器资源管理器”,在里面加一个表“Stock”,编写表如下:

    添加了之后呢,在里面的App _Code加两个文件夹,这两个文件夹是至关重要的,因为他两分别代表了三层架构思想中的业务逻辑层和数据层

    图如下

    Business文件夹下的StockSystem.cs是业务逻辑层。DataAccess文件夹下的Stock.cs是数据层

    他俩的源码如下

    Stock:

    复制代码
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Web;
     4 using System.Data;
     5 using System.Data.SqlClient;
     6 /// <summary>
     7 ///Stock 的摘要说明
     8 /// </summary>
     9 public class Stock
    10 {
    11     private SqlConnection conn;
    12     private SqlConnection GetConnection()
    13     {
    14         if (conn == null || conn.State == ConnectionState.Closed)
    15             conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\bankDB.mdf;Integrated Security=True;User Instance=True");
    16         return conn;
    17     }
    18     public DataSet Select(string selectSql)
    19     {
    20         DataSet ds = new DataSet();
    21         SqlDataAdapter adapter = new SqlDataAdapter(selectSql, this.GetConnection());
    22         adapter.Fill(ds, "Stock");
    23         return ds;
    24     }
    25     public bool Insert(
    26         string name, float startPrice, float endPrice, float kcd, double sum, DateTime date
    27         )
    28     {
    29         string sql = string.Format("insert into Stock values ('{0}','{1}','{2}','{3}','{4}','{5}')", name, startPrice, endPrice, kcd, sum, date);
    30         SqlCommand cmd = new SqlCommand(sql, this.GetConnection());
    31         try
    32         {
    33             cmd.Connection.Open();
    34             cmd.ExecuteNonQuery();
    35 
    36         }
    37         catch (SqlException e)
    38         {
    39             Console.WriteLine(e.Message);
    40             return false;
    41         }
    42         finally
    43         {
    44             cmd.Connection.Close();
    45         }
    46         return true;
    47     }
    48 }
    复制代码

    StockSystem:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Data;
    using System.Data.SqlClient;
    /// <summary>
    ///StockSystem 的摘要说明
    /// </summary>
    public class StockSystem
    {
        Stock stock = new Stock();
        public DataSet GetOneStockByName(string name)
        {
            string selectSql = string.Empty;
            if (name.ToUpper() == "ALL") selectSql = "select * from Stock";
            else
                selectSql =string.Format ("select * from Stock where Name='{0}'",name) ;
            return stock.Select(selectSql);
     
        }
        public bool InsertStock(
            string name, float startPrice, float endPrice, float kcd, double sum, DateTime date
            )
        {
            if (startPrice > 0 && endPrice > 0 && kcd > 0)
                return stock.Insert(name, startPrice, endPrice, kcd, sum, date);
            else
                return false;
        }
    }

      然后添加一个新的名叫“StockService”的Web服务,通过添加新项的方式建立(在web项目上右键“添加新项”选择web服务),然后删掉原先默认生成的“Service.asmx”。在新建的StockService.cs添加如下代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Services;
    using System.Data;
    using System.Data.SqlClient;
    /// <summary>
    ///StockService 的摘要说明
    /// </summary>
    [WebService(Namespace = "MyStock")]
    public class StockService : System.Web.Services.WebService {
        StockSystem stockManager = new StockSystem();
        [WebMethod(Description = "按名字查询股票")]
        public DataSet GetstockByName(string name)
        {
            return stockManager.GetOneStockByName(name);
        }
        [WebMethod(Description = "插入一只股票")]
        public bool InsertStock(
            string name, float startPrice, float endPrice, float kcd, double sum, DateTime date
            )
        {
            return stockManager.InsertStock(name, startPrice, endPrice, kcd, sum, date);
        }
     
       
    }

      现在三层架构完成两层了。。。

    但是这个Web服务还没发布出去,发布到网络上的IIS服务器现在本人还不会,只是发在本机上的虚拟目录里。

    首先 打开 控制面板 管理工具 Internet信息服务

    单击 网站 默认网站 右击默认网站 选择 添加虚拟目录 选择刚刚建立WebService的文件夹,就是第一张图里面的那个位置的目录

    添加的时候会让你起一个别名,我在这里叫“StockService13”

    添加之后是如下效果:

    然后再右击StockService13,选择转为应用程序,这里很简单,进去取个名字就行了,建议跟之前的那个“别名”一致.

    完成然后退出

    下面是界面层

    向解决方案添加一个Windows项目和一个ASP.NET网站项目,以显示咱们写的这个Web服务,可以被windows程序调用,也可以被网页调用。

    前面讲到这个。。。数据层和业务逻辑层都构架好了,只剩下表面层的。下面说说表面层的事情:

    右键 解决方案,添加新项,

    “哎?我怎么没有这个解决方案呢,上来 就是那一个项目,别急,你没有让它显示出来。找到 工具 选项 项目和解决方案 勾选右边的 ‘总是显示解决方案’ ”

    然后就可以了

    右键 解决方案,添加新项,

    选择 windows窗体,注意,这里也要选“.net 2.0”,这是为了避免出现兼容性问题。而且也是为了一会找web服务好找,如果用的是3.5的话,默认web服务是在兼容里面,不是很好找,也不是很兼容

    接着再以同样的方法,添加一个ASP.NET网站项目。

    添加完了之后,在你的解决方案管理器里面,就是这个样的了

    现在引用刚刚我们发布在本机的服务

    右键 web 这个项目 选择 添加web引用

    然后选择”此方案中的Web服务”或者:“本地计算机上的web服务”都可以,因为笔者咋发布服务时遇到了如下错误,只能是选择‘此解决方案中的Web服务’了

    就是这个错误

    所以无奈只能选择了 此解决方案的那一个        ,然后在添加引用那里给它取个名

    然后下面的工作就比较好做了

    在你的Web里添加一个GridView一个textBox一个button 为button添加代码如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.SqlClient;
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
     
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            localhost13.StockService stockSev = new localhost13.StockService();
            DataSet ds = stockSev.GetstockByName(TextBox1.Text.Trim());
            this.GridView1.DataSource = ds.Tables[0].DefaultView;
            this.GridView1.DataBind();
        }
    }

      注意 还要改一个地方  打开 web.config

    改这个地方

      <compilation debug="true">,原先是“false”,改成true。

    然后编译一下。。。效果如下

    在WinForm里面的工作肯定是轻车熟路 托一个datagridview拖一个 textBox 拖一个button  为button添加如下代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
     
    namespace WinForm
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                localhost13.StockService stockservice = new localhost13.StockService();
                DataSet ds = stockservice.GetstockByName(textBox1.Text);
                this.dataGridView1.DataSource = ds.Tables[0].DefaultView;
            }
        }
    }

      运行一下效果如下

    至此,这个简单的WebService就做完了 我们只添加了winform 的引用和web的引用,事实上,为手机的开发应该也是可以引用的,这也是未来的趋势。。。在这里先只演示前两项了。

  • 相关阅读:
    十个MySQL常用函数
    写给三十岁的自己
    EJS 模板引擎
    发送HTTP请求(GET,POST)
    路由模块化
    原生NodeJS封装Express路由
    Hook简介
    State Hook (useState)
    Effect hooks
    useContext
  • 原文地址:https://www.cnblogs.com/Vooom/p/2559162.html
Copyright © 2020-2023  润新知