.NET最强大的一个方面之一就是可以利用它创建Web服务。一个Web服务就是一个网站所提供的供其它网站调用的外部接口。
在你创建一个Web服务之前,你首先必须问问自己:“我要向我的用户提供什么服务?”。
[WebMethod]
public
DataSet SQLDB(
string
Query)

...
{
try

...{
SqlConnection CS = new SqlConnection("server=(local)/NetSDK;database=Northwind;Trusted_Connection=yes");
SqlDataAdapter myCommand = new SqlDataAdapter (Query, CS);
DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet, "Results");
return myDataSet;
}
catch(Exception ex)

...{
return DataError(ex);
}
}
[WebMethod]
public
DataSet AccessDB(
string
Query)

...
{
try

...{
string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ this.Server.MapPath("AccessWebServices.mdb");
OleDbConnection myAccessConn = new OleDbConnection(strAccessConn);
OleDbCommand myAccessCommand = new OleDbCommand(Query,myAccessConn);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);
myAccessConn.Open();
DataSet myDataSet = new DataSet();
myDataAdapter.Fill(myDataSet,"Results");
myAccessConn.Close();
return myDataSet;
}
catch(Exception ex)

...{
return DataError(ex);
}
}
public
DataSet DataError(Exception ex)

...
{
DataSet errDS = new DataSet("Errors");
DataTable errTable = errDS.Tables.Add("Error");
errTable.Columns.Add("Message");

errTable.Rows.Add(new Object[] ...{ex.Message});
return errDS;
}
private
void
menuItem1_Click(
object
sender,System.EventArgs e)

...
{
WebServicesClient.localhost.DataBaseWebService Database = new WebServicesClient.localhost.DataBaseWebService();
DataSet ds = Database.SQLDB("select * from Products");
dataGrid1.DataSource = ds.Tables[0];
}
private
void
menuItem2_Click(
object
sender,System.EventArgs e)

...
{
WebServicesClient.localhost.DataBaseWebService Database = new WebServicesClient.localhost.DataBaseWebService();
DataSet ds = Database.AccessDB("select * from AcessTableTest");
dataGrid1.DataSource = ds.Tables[0];
}
using
System;
using
System.Collections;
using
System.ComponentModel;
using
System.Data;
using
System.Diagnostics;
using
System.Web;
using
System.Web.UI;
using
System.Web.Services;
using
System.Web.Services.Protocols;
using
System.IO;


/**/
/// <summary>
/// GetBinaryFile 的摘要说明
/// </summary>
[WebService(Namespace
=
"
http://localhost/
"
)]
[WebServiceBinding(ConformsTo
=
WsiProfiles.BasicProfile1_1)]

public
class
GetBinaryFile : System.Web.Services.WebService
...
{


public GetBinaryFile () ...{

//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}

[WebMethod(Description = "Web 服务提供的方法,返回给定文件的字节数组")]
public byte[] GetImage(string requestFileName)

...{

/**////得到服务器端的一个图片
///如果你自己测试,注意修改下面的实际物理路径
if (requestFileName == null || requestFileName == "")
return getBinaryFile(Server.MapPath("/img/propic.gif"));
else
return getBinaryFile(Server.MapPath(requestFileName));
}


/**//// <summary>
/// getBinaryFile:返回所给文件路径的字节数组。
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public byte[] getBinaryFile(string filename)

...{
if (File.Exists(filename))

...{
try

...{

/**////打开现有文件以进行读取。
FileStream s = File.OpenRead(filename);
return ConvertStreamToByteBuffer(s);
}
catch (Exception e)

...{
return new byte[0];
}
}
else

...{
return new byte[0];
}
}

/**//// <summary>
/// ConvertStreamToByteBuffer:把给定的文件流转换为二进制字节数组。
/// </summary>
/// <param name="theStream"></param>
/// <returns></returns>
public byte[] ConvertStreamToByteBuffer(System.IO.Stream theStream)

...{
int b1;
System.IO.MemoryStream tempStream = new System.IO.MemoryStream();
while ((b1 = theStream.ReadByte()) != -1)

...{
tempStream.WriteByte(((byte)b1));
}
return tempStream.ToArray();
}
[WebMethod(Description = "Web 服务提供的方法,返回给定文件类型。")]
public string GetImageType()

...{
// if (mytype.Trim() == "flash")
// return "movie/swf";
// else

/**////这里只是测试,您可以根据实际的文件类型进行动态输出
return "image/jpg";
}
}



using
System;
using
System.Collections;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Web;
using
System.Web.SessionState;
using
System.Web.Services;
using
System.Configuration;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;

public
partial
class
GetBinaryFileShow : System.Web.UI.Page

...
{

protected void Page_Load(object sender, System.EventArgs e)

...{
string imgurl = "",mytype="";
if (this.Request.QueryString["imgurl"].ToString().Trim()!=null)
imgurl = this.Request.QueryString["imgurl"].ToString();
if (this.Request.QueryString["mytype"].ToString().Trim() != null)
mytype = this.Request.QueryString["mytype"].ToString();
// 在此处放置用户代码以初始化页面

/**////定义并初始化文件对象;
localhost.GetBinaryFile oImage;
oImage = new localhost.GetBinaryFile();

/**////得到二进制文件字节数组;
byte[] image = oImage.GetImage(imgurl);

/**////转换为支持存储区为内存的流
System.IO.MemoryStream memStream = new System.IO.MemoryStream(image);

/**////定义并实例化Bitmap对象
Bitmap bm = new Bitmap(memStream);

/**////根据不同的条件进行输出或者下载;
Response.Clear();

/**////如果请求字符串指定下载,就下载该文件;
///否则,就显示在浏览器中。
if (Request.QueryString["Download"] == "1")

...{
Response.Buffer = true;
Response.ContentType = "application/octet-stream";

/**////这里下载输出的文件名字 ok.jpg 为例子,你实际中可以根据情况动态决定。
Response.AddHeader("Content-Disposition", "attachment;filename=ok.jpg");
}
else
Response.ContentType = oImage.GetImageType();
Response.BinaryWrite(image);
Response.End();
}


Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)

...{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}


/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()

...{
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}

<
asp:Image ID
=
"
Image1
"
ImageUrl
=
"
GetBinaryFileShow.aspx?imgurl=
"
runat
=
"
server
"
/>
在你创建一个Web服务之前,你首先必须问问自己:“我要向我的用户提供什么服务?”。
创建一个Web服务是很简单的,首先创建一个.asmx文件(你可以用Visual Studio .NET或你自己喜欢的任何文本编辑器,推荐使用Web Matrix,它有创建Web服务的模板),Web服务作为一个普通的类进行创建,在方法的前面有一个宏,表明这个方法是通过Web服务来访问的。
1.创建数据库Web Services






















































客户端调用














2.通过Web Services下载文件
GetBinaryFile.cs












































































































客户端调用
GetBinaryFileShow.aspx.cs


























































































