一、WebService的调试

net 2.0新建webservice为了安全考虑,默认关闭了Post和Get方法 。

让其打开,可在Web.config文件的<system.web>下增加(如果已经存在就修改之)

<webServices>
<protocols>
<add name="HttpGet"/> <!--或<add name="HttpPost"/>-->
</protocols>
</webServices>

Web服务定义如下:

[WebMethod]
public int Add(int i)
{
return 33+i;
}

通过URL访问Web服务,HttpGet方式返回XML:

http://../WebServices1.asmx/Add?i=1

返回:

<?xml version="1.0"?>
<int xmlsns="..">34</int>

二、WebMethod属性:

WebMethod有6个属性:

  1. .Description:是对webservice方法描述的信息。就像webservice方法的功能注释,可以让调用者看见的注释。
  2. .EnableSession:指示webservice否启动session标志,主要通过cookie完成的,默认false。
  3. .MessageName:主要实现方法重载后的重命名。
  4. .TransactionOption:指示 XML Web services 方法的事务支持。
  5. .CacheDuration:Web支持输出高速缓存,这样webservice就不需要执行多遍,可以提高访问效率,
  6. .BufferResponse:配置WebService方法是否等到响应被完全缓冲完,才发送信息给请求端。普通应用要等完全被缓冲完才被发送的!

三、EnableSession属性

指示webservice否启动session标志,主要通过cookie完成的。默认为false。

[WebMethod(true)] //默认参数为EnableSession
public string Login(string name)
{
Context.Session["name"] = name;
return name;
}
[WebMethod(EnableSession = true)]
public string GetName()
{
if (Context.Session["name"] != null)
return Context.Session["name"].ToString();
else
return "";
}

在客户端,要在实例化了webservice代理类之后,要为它的CookieContainer 实例化一个 new CookieContainer(),这样才能使用session存储状态多个页面使用。

新类继承引用的webservice,并给CookieContainer赋值。

public class WebService1:localhost.WebService
{
private static System.Net.CookieContainer cookieContainer; static WebService1()
{
cookieContainer = new System.Net.CookieContainer();//静态初始化
} public WebService1()
{
this.CookieContainer = cookieContainer;
}
}

在各个页面使用派生的WebService类,可以获得同一个CookieContainer :

protected void btnLogin_Click(object sender, EventArgs e)
{
WebService1 ws = new WebService1();
ws.Login(txtName.Text);
}
protected void btnGetName_Click(object sender, EventArgs e)
{
WebService1 ws = new WebService1();
lblName.Text = ws.GetName();
}

四、MessageName属性

主要实现方法重载后的重命名,在Soap消息中引用时,SOAP使用MessageName而非方法名。

在下面的示例中,MessageName 用于消除两个 Add 方法的歧义。
通过Add访问的是第一个方法,而通过Add2访问的是第二个方法!

public class Calculator : WebService {
// The MessageName property defaults to Add for this XML Web service method.
[WebMethod]
public int Add(int i, int j) {
return i + j;
}
    [WebMethod(MessageName="Add2")]
public int Add(int i, int j, int k) {
return i + j + k;
}
}

访问:http://../WebServices1.asmx/Add2?i=1

五、WebService基于SOAPHeadear实现安全认证

1、首先自定义SoapHeader,需继承自System.Web.Services.Protocols.SoapHeader

/// <summary>
///自定义的SoapHeader
/// </summary>
public class MySoapHeader : System.Web.Services.Protocols.SoapHeader
{
public MySoapHeader()
{
} public MySoapHeader(string userName, string passWord)
{
this.UserName = userName;
this.PassWord = passWord;
} public string UserName {set;get;} public string PassWord { set; get; }
}

2、添加WebService:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{
//声明Soap头实例
public MySoapHeader myHeader = new MySoapHeader(); [System.Web.Services.Protocols.SoapHeader("myHeader")]
[WebMethod]
[SoapHeader(myHeader)]//用户身份验证的SOAP头
public string HelloWord()
{
//可以通过存储在数据库中的用户与密码来验证
if (myHeader.UserName.Equals("SoapHeader") & myHeader.PassWord.Equals("456789"))
{
return "调用服务成功!";
}
else
{
return "对不起,您没有权限调用此服务!";
}
}
}

3、客户端调用,设置SoapHeader;

localhost.WebService service = new localhost.WebService();

//将用户名与密码存入SoapHeader;
localhost.MySoapHeader header = new localhost.MySoapHeader();
header.UserName = "SoapHeader";
header.PassWord = "456789";
service.MySoapHeaderValue = header;
Console.WriteLine("设置SoapHeader:" + service.HelloWord()); //或者
Console.WriteLine("设置SoapHeader:" + service.HelloWord(header));

[WebMethod]参数介绍的更多相关文章

  1. SQLMAP参数介绍

    转自:http://zhan.renren.com/bugpower?gid=3602888498044629629&checked=true SQLMAP参数介绍 sqlmap的使用方式:p ...

  2. G++ 参数介绍(转载)

    g++参数介绍 From: http://www.cnblogs.com/lidan/archive/2011/05/25/2239517.html gcc and g++分别是gnu的c & ...

  3. pentaho cde 画图参数介绍

    初步接触pentaho,由于在国内的资料很少,唯有看英文文档,做了N次反复尝试,挖掘了pentaho CDE中画图的一些基本参数. 下面就列出来了一些常用参数介绍: crosstabMode:表明如果 ...

  4. mysql性能优化学习笔记-参数介绍及优化建议

    MySQL服务器参数介绍 mysql参数介绍(客户端中执行),尽量只修改session级别的参数. 全局参数(新连接的session才会生效,原有已经连接的session不生效) set global ...

  5. 【体系结构】Oracle参数介绍

    [体系结构]Oracle参数介绍 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩ ...

  6. Bootstrap Paginator 分页插件参数介绍及使用

    Bootstrap Paginator是一款基于Bootstrap的js分页插件,功能很丰富,个人觉得这款插件已经无可挑剔了.它提供了一系列的参数用来支持用户的定制,提供了公共的方法可随时获得插件状态 ...

  7. Apache中 RewriteRule 规则参数介绍

    Apache中 RewriteRule 规则参数介绍 摘要: Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量 ...

  8. Linux 启动参数介绍

    Linux 启动参数介绍 取自2.6.18 kernel Documentation/i386/boot.txt 文件中介绍 vga= 这里的不是一个整数(在C语言表示法中,应是十进制,八进制或者十六 ...

  9. Xcopy参数介绍

    DOS批处理命令,永远是不朽的命令,不仅功能强大,同时,速度也是最快的!但是,很多新手学习计算机,都已经遗忘了本不该忘记的批处理命令. 我们不可数典忘祖,该学习的还是要学习,不该忘记的还是不能忘记,尤 ...

随机推荐

  1. UiPath工具取得网页上面的数据,写入到csv,Outlook邮件发送

    问题描述: 想取得网页上面的股票价格,之后写入到csv文本里面之后添加附件发送邮件. 解决方法: 利用UIPath工具来取得数据,之后写入再发送. 具体步骤: 1.打开网页,之后找到所显示的股票行情的 ...

  2. c# 中对于每次修改的程序 都必须重新手动生成 才能编译的问题

    问题描述:原来用VS2017,升级了VS2019,发现修改了Winform界面,F5运行竟然还是原来的界面 问题解决: 需要修改两个地方 工具>> 选项>> 项目和解决方案&g ...

  3. Word 插入目录的 5 种方法

    1. "运用多级编号法"之图文教程 效果图: 步骤: 首先,为了更好的演示,我们先将我们的一级标题全部选中,按住Ctrl键,去一一选择就行了. 选中一级标题后,我们进入「开始」-「 ...

  4. 顺序表添加与删除元素以及 php实现顺序表实例

    对顺序表的操作,添加与删除元素. 增加元素 如下图所示  对顺序列表 Li [1328,693,2529,254]  添加一个元素 111 ,有三种方式: a)尾部端插入元素,时间复杂度O(1);  ...

  5. Python之数字的四舍五入(round(value, ndigits) 函数)

    round(value, ndigits) 函数 print(round(1.23)) # 1 print(round(1.27)) # 1 print(round(1.23,1)) # 1.2 第二 ...

  6. Django入门(下)

    一.创建APP 在每一个django项目中可以包含多个APP,相当于一个大型项目中的分系统.子模块.功能部件等.互相之间比较独立,但也有联系. 在pycharm下方的Terminal终端中输入命令: ...

  7. django 浅谈索引(转)

    https://blog.csdn.net/qq_37049050/article/details/80749381

  8. Mysql对查询结果添加序列号

    ; as rownum,* from table1 :=和=的区别? "=",只有在set和update时才和:=一样,赋值的作用,其它都是等于的作用.鉴于此,用变量实现行号时,必 ...

  9. c# 实体类转XML

    /// <summary> /// 将实体类转换成XML /// </summary> /// <typeparam name="T">< ...

  10. spring源码(1)---idea基础环境搭建

    一.环境准备 1. jdk1.8.1 做java开发的这个应该能自己找到 2.gradle-4.9 https://services.gradle.org/distributions/ 没用过grad ...