最近的项目中应用到是SOAPHeader的东西,记录一下。
Webservice代码如下:
myModel下的SecurityInfo.cs 安全通信验证类代码如下:
C#中使用方法就超简单了
第一步当然是添加Webservice引用咯。呵呵
看代码
Webservice代码如下:
程序代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using zWebServices.myModel;
using System.Web.Services.Protocols;
namespace zWebServices
{
/// <summary>
/// test1 的摘要说明
/// </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 test1 : System.Web.Services.WebService
{
//声明Soap头实例
public SecurityInfo securityInfo = new SecurityInfo();
[WebMethod]
public string HelloWorld()
{
return "Hello!";
}
/*
* BufferResponse 对于少量数据,设置为 true 可提高 XML Web services 的性能
* CacheDuration 就是指定缓存时间(秒)的属性。我一般定义为12个小时,对于一些不是需要经常取数据的情况
*/
/// <summary>
/// 获取信息列表
/// </summary>
/// <param name="ss">信息</param>
/// <returns></returns>
[WebMethod(Description="获取信息列表",BufferResponse=true)]
[SoapHeader("securityInfo")] //要使用验证的地方加入Soap头
public string getInfoList(string ss)
{
string msg = "";
if (!securityInfo.IsValid(out msg)) {
return msg;
}
return "安全KEY:" + ss + " 安全CODE:"; //+ info.code;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using zWebServices.myModel;
using System.Web.Services.Protocols;
namespace zWebServices
{
/// <summary>
/// test1 的摘要说明
/// </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 test1 : System.Web.Services.WebService
{
//声明Soap头实例
public SecurityInfo securityInfo = new SecurityInfo();
[WebMethod]
public string HelloWorld()
{
return "Hello!";
}
/*
* BufferResponse 对于少量数据,设置为 true 可提高 XML Web services 的性能
* CacheDuration 就是指定缓存时间(秒)的属性。我一般定义为12个小时,对于一些不是需要经常取数据的情况
*/
/// <summary>
/// 获取信息列表
/// </summary>
/// <param name="ss">信息</param>
/// <returns></returns>
[WebMethod(Description="获取信息列表",BufferResponse=true)]
[SoapHeader("securityInfo")] //要使用验证的地方加入Soap头
public string getInfoList(string ss)
{
string msg = "";
if (!securityInfo.IsValid(out msg)) {
return msg;
}
return "安全KEY:" + ss + " 安全CODE:"; //+ info.code;
}
}
}
myModel下的SecurityInfo.cs 安全通信验证类代码如下:
程序代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace zWebServices.myModel
{
/// <summary>
/// 安全类
/// </summary>
public class SecurityInfo : System.Web.Services.Protocols.SoapHeader
{
private string _AppKey = string.Empty;
private string _AppCode = string.Empty;
public string AppKey {
get { return _AppKey; }
set { _AppKey = value; }
}
public string AppCode {
get { return _AppCode; }
set { _AppCode = value; }
}
public SecurityInfo() { }
public SecurityInfo(string pKey, string pCode) {
AppKey = pKey;
AppCode = pCode;
}
/// <summary>
/// 验证用户名密码是否正确
/// </summary>
/// <param name="nMsg">返回错误信息</param>
/// <returns>SOAP密钥是否正确</returns>
public bool IsValid(out string nMsg) {
return IsValid(_AppKey, _AppCode, out nMsg);
}
/// <summary>
/// 验证用户名密码是否正确
/// </summary>
/// <param name="nKey">应用Key</param>
/// <param name="nCode">应用通信密钥</param>
/// <param name="nMsg">返回错误信息</param>
/// <returns>SOAP密钥是否正确</returns>
private bool IsValid(string nKey, string nCode, out string nMsg) {
nMsg = "对不起! 您无权调用此 Web 服务";
try {
if (nKey == "admin" && nCode == "123456") {
return true;
} else {
return false;
}
} catch {
return false;
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace zWebServices.myModel
{
/// <summary>
/// 安全类
/// </summary>
public class SecurityInfo : System.Web.Services.Protocols.SoapHeader
{
private string _AppKey = string.Empty;
private string _AppCode = string.Empty;
public string AppKey {
get { return _AppKey; }
set { _AppKey = value; }
}
public string AppCode {
get { return _AppCode; }
set { _AppCode = value; }
}
public SecurityInfo() { }
public SecurityInfo(string pKey, string pCode) {
AppKey = pKey;
AppCode = pCode;
}
/// <summary>
/// 验证用户名密码是否正确
/// </summary>
/// <param name="nMsg">返回错误信息</param>
/// <returns>SOAP密钥是否正确</returns>
public bool IsValid(out string nMsg) {
return IsValid(_AppKey, _AppCode, out nMsg);
}
/// <summary>
/// 验证用户名密码是否正确
/// </summary>
/// <param name="nKey">应用Key</param>
/// <param name="nCode">应用通信密钥</param>
/// <param name="nMsg">返回错误信息</param>
/// <returns>SOAP密钥是否正确</returns>
private bool IsValid(string nKey, string nCode, out string nMsg) {
nMsg = "对不起! 您无权调用此 Web 服务";
try {
if (nKey == "admin" && nCode == "123456") {
return true;
} else {
return false;
}
} catch {
return false;
}
}
}
}
C#中使用方法就超简单了
第一步当然是添加Webservice引用咯。呵呵
看代码
程序代码
myWebService1.test1 ss = new myWebService1.test1();
string str = ss.HelloWorld();
Response.Write(str + "<br>");
myWebService1.SecurityInfo info = new myWebService1.SecurityInfo();
info.AppKey = "admin";
info.AppCode = "123456"; //改改key 或 code试试
ss.SecurityInfoValue = info; //设置SOAP头
string str1 = ss.getInfoList("sdfs");
Response.Write(str1 + "<br>");
string str = ss.HelloWorld();
Response.Write(str + "<br>");
myWebService1.SecurityInfo info = new myWebService1.SecurityInfo();
info.AppKey = "admin";
info.AppCode = "123456"; //改改key 或 code试试
ss.SecurityInfoValue = info; //设置SOAP头
string str1 = ss.getInfoList("sdfs");
Response.Write(str1 + "<br>");