Quantcast
Channel: 终吾一生--SonTin'Blog - WebService
Viewing all articles
Browse latest Browse all 6

C# Webservice SOAP SOAPHeader

$
0
0
最近的项目中应用到是SOAPHeader的东西,记录一下。

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;
        }

    }
}


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;
            }
        
        }

    }
}



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>");


Viewing all articles
Browse latest Browse all 6

Latest Images

Trending Articles





Latest Images