首页 > 代码库 > .NET中 webservice加密简谈(基础1)
.NET中 webservice加密简谈(基础1)
在博客园都呆了几年了,一直都是看各位大神的文章。自己从来也没亲自写多点点。本码农打算从今年去也开始写写文章,打打基础,以备不时の需。废话不多说了,开始进入正题。高手就可以不用看了。仅是给新人看的。哈哈
- 加密目的:webservice最后部署了无非就是一个URL地址。只要知道地址就能够看到响应的结果。所以给webservice设置了访问用户和密码。增强安全性,使它只能被授权的用户使用。
- 集体实现过程如下:
(1):打开VS2010建立解决方案(WService20150106)(PageBaseWebservice.asmx)(个人觉得VS在大了推荐大家使用WCF,还是什么其他原因没有在创建的时候直接找到webservice项目,可以先创建一个空的ASP.net 项目,在添加就能找到webservice)。代码如下注释很清楚。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Services; 6 7 namespace Webservice2015 8 { 9 /// <summary>10 /// PageBaseWebservice 的摘要说明11 /// </summary>12 [WebService(Namespace = "http://tempuri.org/")]13 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]14 [System.ComponentModel.ToolboxItem(false)]15 // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。16 // [System.Web.Script.Services.ScriptService]17 public class PageBaseWebservice : System.Web.Services.WebService18 {19 20 public MySoapHeader _MySoapHeader;// 定义一个变量21 /// <summary>22 /// 重点是这个类是继承System.Web.Services.Protocols.SoapHeader 这是关键。加密就全靠这个了23 /// </summary>24 public class MySoapHeader : System.Web.Services.Protocols.SoapHeader25 {26 #region27 /// <summary>28 /// 用户名29 /// </summary>30 private string _name;31 public string Name32 {33 get { return _name; }34 set { _name = value; }35 }36 /// <summary>37 /// 秘密38 /// </summary>39 private string _password;40 public string Password41 {42 get { return _password; }43 set { _password = value; }44 }45 #endregion46 47 /// <summary>48 /// 无参数的构造函数49 /// </summary>50 public MySoapHeader()51 {52 }53 /// <summary>54 /// 带参数的构造函数55 /// </summary>56 /// <param name="Name">参数用户名</param>57 /// <param name="Password">参数秘密</param>58 public MySoapHeader(string Name, string Password)59 {60 this.Name = Name;61 this.Password = Password;62 }63 }64 65 [WebMethod(Description = "验证权限", CacheDuration = 0, BufferResponse = true)]66 [System.Web.Services.Protocols.SoapHeader("_MySoapHeader")]67 public bool Validation()68 {69 /// 判断用户名 和密码 是否正确。 这里仅做测试。用户名和密码 可以写在配置文件中。70 if (_MySoapHeader.Name == "KG" && _MySoapHeader.Password=="123456")71 // 匹配成功72 return true;73 //匹配失败74 return false;75 }76 }77 }
(2):在创建一个WebServiceTest.asmx。这个和(1)中PageBaseWebservice.asmx 是继承关系。PageBaseWebservice 继承自 System.Web.Services.WebService。WebServiceTest 是继承PageBaseWebservice。代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Services;namespace Webservice2015{ /// <summary> /// WebServiceTest 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 // [System.Web.Script.Services.ScriptService] public class WebServiceTest : PageBaseWebservice { [WebMethod(Description = "验证测试", CacheDuration = 0, BufferResponse = true)] // 加上标记 [System.Web.Services.Protocols.SoapHeader("_MySoapHeader")] public string HelloWorld() { if (Validation())// 验证 { return "Hello World"; } else { return "你没权限"; } } }}
(3):建立一个控制台程序。在添加引用。代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { /// 服务 ServiceReference1.WebServiceTestSoapClient webclient = new ServiceReference1.WebServiceTestSoapClient(); /// soap 下面就是要传过过去用户名和密码 ServiceReference1.MySoapHeader my = new ServiceReference1.MySoapHeader(); my.Name = "KG"; my.Password = "123456"; /// my 做为一个参数传过去。 string str= webclient.HelloWorld(my); Console.Write(str); Console.ReadKey(); } }}
(4):结果只有正确输入的时候才能返回helloword。否则返回的是没有权限。
.NET中 webservice加密简谈(基础1)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。