用C#写简单的Web Service

能跑就行,但要注明安装过程。

简单的。谢谢了。
没有功能要求,只要是用C#写简单的Web Service就行。

在开始下面这个例子之前,你的系统需要:
1、WIN2000 + IIS;
2、VS.Net;
3、SQL Server(我这里用的是SQL数据库);

这个Web Service的例子用的是MS大吹的C#写的,如果你喜欢VB,那么用VB也是一样的哦,只不过语法上一些小的差别而已,道理都是一样的,不过即然MS都鼓吹C#,如果你能够用C#写还是用这为好哦。

下面是写的步骤:

一、打开VS。NET的集成开发环境,FILE菜单上选择New,新建一个C#的ASP.NET Web Service工程,工程名为WebServiceDemo(完整的是http://localhost/WebServiceDemo)。这是VS就在你的Web系统目录下生成了相应的文件,我的服务目录是默认的c:\Inetpub\wwwroot,生成的文件就在c:\Inetpub\wwwroot\webserviceDemo下,就不多说了。

二、打开与生成工程对应的C#源文件,这里是Service1.asmx.cs,VS.Net集成环境已经为你生成了相应的代码如下:
// =============================================================================
// 文件: Service1.asmx.cs
// 描述: 架构一个Web Service来对数据库进行互访
//
//
// ============================================================================

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.Data.SqlClient;

// 系统生成了与工程名相同的命名空间
namespace WebServiceDemo
{
/// <summary>
/// Summary description for Service1.
/// </summary>
// 所有的WEB服务都是派生于System.Web.Services.WebService的。
public class Service1 : System.Web.Services.WebService
{
public Service1()
{
//CODEGEN: This call is required by the ASP.NET Web Services Designer
InitializeComponent();
}
}
}

里面我添加了文件说明和相应的注释,接下来就是在里面编写相应的服务代码了。这里我想先把对数据库的操作封装在同一命名空间的单独的一个类里,下面编写WEB方法时只用接调用这个类中的相应方法就可以了。下面是我写的这个类的代码:

// -------------------------------------------------------------------------
// 构建一个新类,用于对数据的访问
// -------------------------------------------------------------------------
public class DataAccess
{
// 连接字符串成员变量
private string m_szConn = "";
private SqlConnection m_sqlConn;
private SqlDataAdapter m_sqlDa;
// 构造函数
public DataAccess(string szConnectionString)
{
m_szConn = szConnectionString;
}
// 返回一个记录集
public DataSet GetDataset(string szCommandText)
{
DataSet sqlDs;

try
{
m_sqlConn = new SqlConnection(m_szConn);
m_sqlConn.Open();
m_sqlDa = new SqlDataAdapter(szCommandText,m_sqlConn);
sqlDs = new DataSet();
m_sqlDa.Fill(sqlDs);
m_sqlConn.Close();
return sqlDs;
}
catch
{
return null;
}
}
// 重载上述方法
public DataSet GetDataset(string szCommandText, string szTableName)
{
DataSet sqlDs;

try
{
m_sqlConn = new SqlConnection(m_szConn);
m_sqlConn.Open();
m_sqlDa = new SqlDataAdapter(szCommandText,m_sqlConn);
sqlDs = new DataSet();
m_sqlDa.Fill(sqlDs,szTableName);
m_sqlConn.Close();
return sqlDs;
}
catch
{
return null;
}
}
}

这些就不多说了,与创建一般的C#类是一样的。类中有三个函数,其中一个为构造函数,调用时传入连接字符串。另外两个函数都是一样的作用,返回用户需要的记录集,只不是调用时传的参数不一样,实质都是一样的。

下面就是在Service1类中添加真正用于WEB调用的代码了,这部分才是给WEB应用程序调用的东西。在编写这个类的代码之前,应该先申请一个服务命令空间,设置相应的属性,这一句可万万不能少哦,呵呵~,它告诉了WEB服务存放的路径等相关的信息。如下:
// 声明一个服务空间
[WebService(
Namespace = "http://localhost/WebServiceDemo/", //其实这个才是最重要的啦~,其它的都可以不要哦
Name = "Web Service Demo",
Description = "Web Service Demo"
)]
下面是Service1的代码:

public class Service1 : System.Web.Services.WebService
{
public Service1()
{
//CODEGEN: This call is required by the ASP.NET Web Services Designer
InitializeComponent();
}

#region Component Designer generated code

//Required by the Web Services Designer
private IContainer components = null;

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
}

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if(disposing && components != null)
{
components.Dispose();
}
base.Dispose(disposing);
}

#endregion

// 连接字符串常量
const string szConn = "server=(local)\\taoyi;uid=sa;pwd=;"
+ "initial catalog=mydata;data source=taoyi";

[WebMethod]
public String About()
{
return "这是一个C#编写的Web Service演示程序!";
}

// 返回其中一个WebServiceDemo表
[WebMethod]
public DataSet GetServiceDemoTable()
{
DataSet sqlDs = new DataSet();
DataAccess dataAcc = new DataAccess(szConn);
string szSql = "Select * From WebServiceDemo";
sqlDs = dataAcc.GetDataset(szSql,"Demo");

return sqlDs;
}
// 返回由用户指定的查询
[WebMethod]
public DataSet GetByUser(string szCommandText)
{
DataSet sqlDs = new DataSet();
DataAccess dataAcc = new DataAccess(szConn);
sqlDs = dataAcc.GetDataset(szCommandText);

return sqlDs;
}
}
是不是很简单哦,就只这么点,呵呵~,不过也可以说明问题的了。这个类中声明了三个WEB方法,有没有发觉呢?每个方法的前面都加了[WebMethod],表示该方法为WEB方法。呵呵,如果你想要你写的函数可以让WEB应用程序调用的话,这个可不能少的啦~,不然WEB应用程序就无法调用的。

到此一个WEB服务就完成了,点击运行看看,如果没什么错的话,就会出现如下的WEB页面服务描述:

Service1

The following operations are supported. For a formal definition, please review the Service Description.

* GetByUser

* GetServiceDemoTable

* About

.....(下面还有很多)

其中代星号的就是先前在函数前加了[WebMethod]的函数。在出现在页面中你可以单击相应的函数,然后就会跳到调用页面,你可以在相应的文本框中(如果函数有参数的话)输入相应的参数,点而调用按钮,那么就可以看到函数返回的结果了(前提是函数调用无错的话),不过全是XML格式的文本。比如我的GetServiceDemoTable函数调用的结果如下:

<?xml version="1.0" encoding="utf-8" ?>
- <DataSet xmlns="http://tempuri.org/">
- <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="zh-CN">
- <xs:complexType>
- <xs:choice maxOccurs="unbounded">
- <xs:element name="Demo">
- <xs:complexType>
- <xs:sequence>
<xs:element name="ID" type="xs:int" minOccurs="0" />
<xs:element name="szUser" type="xs:string" minOccurs="0" />
<xs:element name="szSex" type="xs:string" minOccurs="0" />
<xs:element name="szAddr" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
- <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
- <NewDataSet xmlns="">
- <Demo diffgr:id="Demo1" msdata:rowOrder="0">
<ID>1</ID>
<szUser>taoyi</szUser>
<szSex>男</szSex>
<szAddr>四川泸州</szAddr>
</Demo>
- <Demo diffgr:id="Demo2" msdata:rowOrder="1">
<ID>2</ID>
<szUser>xiner</szUser>
<szSex>女</szSex>
<szAddr>四川宜宾</szAddr>
</Demo>
</NewDataSet>
</diffgr:diffgram>
</DataSet>

到此为至,Web Service程序就已经算是完成了。

下面要做的是写一个WEB应用程序来测试我写的这个Web Service了,看看能不能达到想要的结果。建立Web应用程序的步骤如下:

一、新建一个ASP.Net Web Application工程,与创建Web Service的第一步一样,只是工程类型不一样罢了。我这里工程名为WebServiceDemoTest,完整的为http://localhost/WebServiceDemoTest,系统就在相应的目录(c:\Inetpub\wwwroot\WebserviceDemoTest)下生成了所需文件。
二、在设计视图下打开WebForm1.aspx文件,在里面放置一个panel容器,为了达到测试的目的,我们需要三个服务端按钮和一个服务端文本框,分别调用我们在Web Service中写的三个函数,另外,为了展示调用方法所得达的数据,还需要一个服务端标签控件和一个DataGrid控件。页面的布置就随便你了,想怎么放置就怎么放置,只要能达到演示的目的就行。
三、引用先前写的Web Service程序,菜单步骤如下project->add web reference...,然后输入我们Web Service的路径,这里是http://localhost/WebServiceDemo/Service1.asmx,点击添加就OK了。这时你将在类视图中看到localhost命名空间了。
四、编写测试代码。

为了便于后面少写些代码,如(xxxx.xxxx.xx xx = new xxxx.xxx.xx()这种),那么首先你得引用localhost命名空间的service1类,以后直接写xxxx xx = new xxxx()就可以了。
下面是几个按钮的代码:

// 测试GetServiceDemoTable()
private void Button2_Click(object sender, System.EventArgs e)
{
DataSet ds = new DataSet();
Service1 oService = new localhost.Service1();

// 返回记录集
ds = oService.GetServiceDemoTable();
if (ds != null)
{
// 显示记录集的记录
DataGrid1.DataSource = ds.Tables["Demo"];
DataGrid1.DataBind();
}
else
{
this.Response.Write("加载数据错误!");
}
}
// 测试GetByUser()
private void Button1_Click(object sender, System.EventArgs e)
{
DataSet ds = new DataSet();
Service1 oService = new localhost.Service1();
String szCommand = TextBox1.Text;

ds = oService.GetByUser(szCommand);
if (ds != null)
{
DataGrid1.DataSource = ds;
DataGrid1.DataBind();
}
else
Response.Write("错误!有可能是SQL命令有问题!");
}
// 测试About()
private void Button3_Click(object sender, System.EventArgs e)
{
Service1 oService = new localhost.Service1();
Label1.Text = oService.About();
}

OK,最后就是运行了,如果一切OK,点击第一个按钮得到的将是在一个包函用户执行的SQL命令的表结果。第二个按钮得到的就是上面运行Web Service时的GetServiceDemoTable得到的XML描述,即
ID szUser szSex szAddr
1 taoyi 男 四川泸州
2 xiner 女 四川宜宾
点击第三个按钮,则在Label1中显示"这是一个C#编写的Web Service演示程序!”的字符串。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-01-21
安装完VS后再安装MSDN,MSDN有构建一个简单WebService的步骤。
第3个回答  2009-01-21
用这个视频,里面有源代码

参考资料:http://www.verycd.com/topics/390584/

第4个回答  2009-01-21
到底要一个什么功能?没说清楚,

使用C#创建webservice及调用方式?
1、创建Webservice服务,需要在VS中首先创建一个Web工程,再添加一个Webservice类即可,。2、编写Webservice的方法,以下以VS默认的HelloWord为例。另外在实际使用中,出现过部署到ESB后不识别的情况,后经测试发现需要增加以下内容:3、在Webservice类上点击右键-在浏览器中查看,可以查看webservice服务,...

用C#写简单的Web Service
这个Web Service的例子用的是MS大吹的C#写的,如果你喜欢VB,那么用VB也是一样的哦,只不过语法上一些小的差别而已,道理都是一样的,不过即然MS都鼓吹C#,如果你能够用C#写还是用这为好哦。下面是写的步骤:一、打开VS。NET的集成开发环境,FILE菜单上选择New,新建一个C#的ASP.NET Web Service工程,工程名为WebSer...

C#WebService调用。结合WebConfig
一般而言,C#中调用WebService,首先得添加web引用,选中你的web项目,点击右键,选择Add Web Reference,这时会出现一个页面,要你输入web service的地址,你填入http:\/\/au3kmwebts1.corpnet.auo.com\/reportcenter\/systemservice\/auoform183.asmx?wsdl后点击go就会找到该页面,填上别名(add reference name...

C#写的WebService,连接数据库后怎么返回JSON字符串
JsonParas就是使用C# JavaScriptSerializer将List<Object>类型的对象序列化之后得到的值,数据格式:[{\\"UserID\\":\\"0206001\\",\\"UserName\\":\\"ceshi\\"}],Json数据中的中括号代表由着多个对象集合序列化,花括号代表一个对象序列化得到的结果,花括号里面的内容使用键值对的方式展示,多个属性之间用逗...

如何在C#中webservice调用方法总结
---自写小例子--- web Service---:[WebMethod]public string HelloWorld() { return "Hello World,wwg";} [WebMethod]public int AddWwg(int a,int b){ return a + b;} exe--- using CallWebService.localhost; \/\/因为自己没有定义命名空间 namespace CallWebService { public partial ...

在IIS服务器上部署soap服务程序(web service)
本文将指导您如何在IIS服务器上部署一个C#编写的web service程序,并实现MES服务器端的相关业务接口。一、IIS服务器安装 1. 首先,打开控制面板。2. 接着,打开“程序和功能”。3. 点击“启用或关闭Windows功能”。4. 在弹出的窗口中,找到“Internet Information Services”并勾选以下安装选项。5. ...

我用C#写了一个WebService程序,需要把临时文件夹C:\\WINDOWS\\TEMP\\重新...
你说的这个临时文件夹如果是使用系统临时文件夹(使用.net函数)则不需要处理.如果是你自己写的方法,直接修改你的路径即可.

c#怎样发布webservice 越详细越好
发布成功后,我的电脑-管理-Internet信息服务-网站-默认网站,右击默认网站-新建虚拟目录,把你刚才发布的网站放到IIS里并设置好就可以用了。测试:在IIS里点到你新建好的虚拟目录,找到你发布的WEB服务文件,如webservice1.asmx,右键-浏览,如果能显示你写的方法就成功了。

如何用C#做一个ASPX访问的WEBSERVICE,
右键,添加服务引用,点进去有一个高级,点击进去之后,你输入webservice地址,点击发现就行了

用C#写的webservice能申请软著么?
可以的,源代码可以申请软件著作权。

相似回答