WebService 是基于soap与http协议以xml数据格式进行通信
、 soap 协议
soap 协议的全称是简单对象访问协议(simple object access protocol),soap 协议已XML的形式进行数据传输,soap协议时可以跨平台使用,只要规范对象的访问方式,但soap协议仍然是基于http协议,通过http去进行数据传输。
soap 协议的组成部分:
a、Soap 信封
b、soap 编码规则
c、soap 远程调用
d、soap 绑定
soap协议和http协议的关系,类似于网络分层的上下层协议。使用soap协议的双方 把soap 包绑定到http报文之中,并且通过http 进行实际的数据传输。

总结: soap 协议提供了简单的数据传输机制,以XML的形式进行数据库传输。
WSDL(Web Service Description Language) web 服务描述语言,它符合XML的语言规范,用来描述服务端webservice 方法,包含以下内容:
a、方法名称
b、方法参数
c、 各个参数的类型
d、返回的数据类型等
一个WSDL可以完整的描述服务器提供的Web Service
Web Service 中webmethod 包含以下属性:

BufferResponse:
/// <summary>
/// BufferResponse =true 时,服务端以16KB的块区 缓冲响应,响应在序列化的同事不断的发给客户端,不管响应是否完全结束
/// 小批量数据 开启时 可显著提高性能
/// </summary>
/// <returns></returns>
[WebMethod(BufferResponse =true)]
public string TestBufferResponse()
{
return "Hello World";
}
enableSession
未开启session:
#region 测试enableSession
[WebMethod(enableSession:true)]
public string TestWithSession()
{
return GetSession();
}
[WebMethod(enableSession: false)]
public string TestWithNoSession()
{
// 当前方法禁止使用session
return GetSession();
}
public string GetSession()
{
if (Session == null)
return $"{nameof(TestWithSession)}__session 被禁用";
if (Session["i"] == null)
Session["i"] = 0;
Session["i"] = (int)Session["i"] + 1;
return Session["i"].ToString() ;
}
#endregion




描述 别名
[WebMethod(CacheDuration =10,EnableSession =true,Description ="测试cacheduration",MessageName ="CacheTest")]
public string TestCachaDuration()
{
if (Session["i"] == null)
Session["i"] = 0;
Session["i"] = (int)Session["i"] + 1;
return Session["i"].ToString();
}

事务:

//首先引用using System.EnterpriseServices;,然后设置属性TransactionOption = TransactionOption.Required。
//设置TransactionOption.Disabled、TransactionOption.NotSupported、TransactionOption.Supported表示不参与事务。
///设置TransactionOption.Required、TransactionOption.RequiresNew表示创建一个新的事务。
///意思是说当TransactionOption的属性为Required或 RequiresNew的WEB服务方法调用另一个TransactionOption的属性为Required或RequiresNew的WEB服务方法时,
///每个WEB服务方法将参与他们自己的事务,因为Web Service方法只能用作事务中的根对象。
//PS:WEB服务方法的TransactionOption默认属性为Disabled
//提交事务ContextUtil.SetComplete();
//回滚事务ContextUtil.SetAbort();
[WebMethod(TransactionOption = TransactionOption.Required)]
public string HelloWorlds()
{
try
{
SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=sa;database=db.mdf;");
SqlCommand cmd = new SqlCommand("update users set name = 'yangxing' where id = 5", con);
con.Open();
cmd.ExecuteNonQuery();
cmd.CommandText = "update users1 set name = 'yangxing1' where id = 6";//users1表不存在,执行该语句报错
cmd.ExecuteNonQuery();//抛出异常
ContextUtil.SetComplete();//提交事务
return "true";
}
catch
{
ContextUtil.SetAbort();//回滚事务
return "false";
}
}
[WebMethod(CacheDuration =10,EnableSession =true,Description ="测试cacheduration",MessageName ="CacheTest")] public string TestCachaDuration() { if (Session["i"] == null) Session["i"] = 0; Session["i"] = (int)Session["i"] + 1; return Session["i"].ToString(); }