GetCategories.asmx
Web Service的作用,不说大家也知道,下面给出一个例子,与大家分享,同时也是我自己的备份。我将名为GetCategories.asmx文件放在http://www.socent.com/WebService上。
<%@ WebService Language="C#" Class="GetCategories" %>
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.Services;
[WebService(Namespace="http://www.socent.com/WebService")] // 指定Web Service所在地址
public class GetCategories : WebService
{
[WebMethod]
public DataSet GetProductCategories() // 这里返回数据集,但是不能为DataTable或DataRow(原因大家应该都知道)
{
string ConnStr = "server=socent;uid=sa;pwd=;database=Northwind";
SqlConnection sqlConn = new SqlConnection(ConnStr);
SqlDataAdapter sqlAdapter = new SqlDataAdapter("SELECT CategoryID, CategoryName, Description FROM Categories", SQLConn);
DataSet ds = new DataSet();
sqlAdapter.Fill(ds, "Category");
return ds;
}
}
编译文件
将远程的文件GetCategories.asmx生成GetCat.cs文件(生成文件为cs、名称空间为GatCat、输出文件为GetCat.cs):
wsdl /l:cs /n:GetCat /out:GetCat.cs http://www.socent.com/WebService/GetCategories.asmx
将上一步生成的GetCat.cs编译成dll组件(参考各项名称空间、生成库文件GetCat..dll):
CSC /r:system.dll /r:System.Web.dll /r:System.Xml.dll /r:System.Web.Services.dll /r:System.Data.dll /t:library /out:GetCat..dll GetCat.cs
本地测试
下面是一个本地测试文件,请先确保将GetCat..dll拷贝到bin目录中,<%@ Import Namespace="GetCat" %>中,我们先指定名称空间,然后通过GetCat.GetCategories objWS = new GetCat.GetCategories()实例化对象,这样就可以调用相应的方法了。
<%@ Page Language="C#"%>
<%@ Import Namespace="GetCat" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html>
<script runat="server">
void Page_Load(object src, EventArgs e)
{
GetCat.GetCategories objWS = new GetCat.GetCategories();
try
{
DataSet ds = objWS.GetProductCategories();
DG_Cat.DataSource = ds.Tables["Category"].DefaultView;
DG_Cat.DataBind();
}
catch (Exception Ex)
{
Msg.Text = Ex.ToString();
}
}
</script>
<body style="font: 10pt verdana">
<h3>下面是从远程获取的数据</h3>
<form runat="server">
<asp:DataGrid id="DG_Cat" runat="server"
BackColor="#FFFFFF"
BorderColor="black"
ShowFooter="False"
CellPadding=3
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="Gray"
EnableViewState="false">
<HeaderStyle ForeColor="#FFFFFF"/>
<AlternatingItemStyle BackColor="Silver"/>
</asp:DataGrid>
<br/><asp:Label id="Msg" runat="server" />
</form>
</body>
</html>
运行结果
对了,上面主要是在cmd下编译文件,也可以在vs.net中通过添加web引用的方式,让vs.net自动编译文件;由于有时候传输的数据比较大(DataSet可能很大),可以采用在Web Service中缓存数据