如何创建和使用Web服务

来源:互联网 发布:isp图像处理算法 编辑:程序博客网 时间:2024/05/18 23:12
.NET最强大的一个方面之一就是可以利用它创建Web服务。一个Web服务就是一个网站所提供的供其它网站调用的外部接口。
在你创建一个Web服务之前,你首先必须问问自己:“我要向我的用户提供什么服务?”。

创建一个Web服务是很简单的,首先创建一个.asmx文件(你可以用Visual Studio .NET或你自己喜欢的任何文本编辑器,推荐使用Web Matrix,它有创建Web服务的模板),Web服务作为一个普通的类进行创建,在方法的前面有一个宏,表明这个方法是通过Web服务来访问的。

1.创建数据库Web Services

[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];
  }

 

2.通过Web Services下载文件

GetBinaryFile.cs

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";
            }

     
    }


    



客户端调用

GetBinaryFileShow.aspx.cs

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
    }



<asp:Image ID="Image1" ImageUrl="GetBinaryFileShow.aspx?imgurl=" runat="server" />
原创粉丝点击