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的引用,事实上,为手机的开发应该也是可以引用的,这也是未来的趋势。。。在这里先只演示前两项了。

posted @ 2012-06-23 09:43  Vooom  阅读(183)  评论(0编辑  收藏  举报