当前位置: 首页 > news >正文

怎样做公司官方网站房屋设计软件app自己设计画图

怎样做公司官方网站,房屋设计软件app自己设计画图,杭州律师,如何增加网站板块上一篇文章地址#xff1a;构建安全的Xml Web Service系列一之初探使用Soap头 (5-22 12:53) 要分析Xml Web Service的安全性#xff0c;首先要解决的问题是我们能了解和清楚Soap消息的格式和内容#xff0c;如果获得不了SoapMessage#xff0c;分析如何能构建安全Xml w…上一篇文章地址构建安全的Xml Web Service系列一之初探使用Soap头 (5-22 12:53)          要分析Xml Web Service的安全性首先要解决的问题是我们能了解和清楚Soap消息的格式和内容如果获得不了SoapMessage分析如何能构建安全Xml web service也就无从下手即使分析出来自己也可 能模模糊糊不能定论。下面就分析下如何获得SoapMessage。    首先介绍一个类-SoapExtensionmsdn对这个类的备注为ASP.NET 允许通过扩展性机制生成与 SOAP 相关的基础结构。ASP.NET SOAP 扩展结构以一种扩展为中心该扩展可以在客户端或服务器上处理消息时在特定阶段中检查或修改消息。ASP.NET SOAP 扩展从 SoapExtension 类派生。GetInitializer 和 Initialize 方法提供其他可用机制用于初始化 SOAP 扩展以增强性能。ProcessMessage 是大多数 SOAP 扩展的核心原因是该方法在 SoapMessageStage 中定义的每一个阶段都被调用从而使 SOAP 扩展得以执行所需的该特定 SOAP 扩展的行为。对于需要修改 SOAP 请求或 SOAP 响应的 SOAP 扩展ChainStream 提供一个机会以接收要通过网络发送的建议数据。 仔细阅读这段文字如果您以前开发过windows程序那第一个应该想到的是原来web service的处理机制和windows窗口程序的消息机制竟然有着一曲同工之妙。下面谈谈如何利用这个类来截获Xml web Service请求和相应的Soap消息从而看看xml web service的庐山真面目。    首先大家先看看这个类这个类完成的功能是将Xml Web Service通过扩展的方式将每次的请求和响应的Soap消息通过日志的方式保存到文本文件中。日志记录的方式也有两种    1。针对每个WebMethod产生一个日志文件。    2。针对每个WebService产生一个日志文件 因为一个WebService可能包含一个或者多个WebMethod所以如果指定两种方法都支持的话那第二个日志两面应该包括第一个日志里面的内容而有些情况下是不需要对每个WebMethod都进行日志记录的这时候采用第一种记录方式增强了系统的灵活性。 下面是扩展了的SoapExtension  webServices        soapExtensionTypes          add typeJillzhang.TraceExtension,Jillzhang priority1  groupHigh  /        /soapExtensionTypes      /webServices 可以记录SoapMessage的SoapExtensionnamespace Jillzhang{    public class TraceExtension: SoapExtension    {        static readonly string LogRoot  System.Configuration.ConfigurationManager.AppSettings[logRoot];        Stream oldStream;        Stream newStream;        string filename;       /// summary       /// 将请求流和响应流存到内存流中已被调用       /// /summary        /// param namestream包含 SOAP 请求或响应的内存缓冲区/param        /// returns它表示此 SOAP 扩展可以修改的新内存缓冲区。/returns        public override Stream ChainStream(Stream stream)        {            oldStream  stream;            newStream  new MemoryStream();            return newStream;        }        /// summary        /// 在Xml Web Service第一次运行的时候一次性的将通过TraceExtensionAttribute传递进来的        /// 保存日志信息的文件名初始化        /// /summary        /// param namemethodInfo应用 SOAP 扩展的 XML Web services 方法的特定函数原型/param        /// param nameattribute应用于 XML Web services 方法的 SoapExtensionAttribute/param        /// returnsSOAP 扩展将对其进行初始化以用于缓存/returns        public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)        {            return ((TraceExtensionAttribute)attribute).Filename;        }        /// summary        /// 替代为每个方法配置的保存SoapMessage文件名而是将整个网络服务        /// 的SoapMessage都保存到一个日志文件中,这个文件路径需要在Web Service        /// 的配置文件中web.config指出,如        /// appSettings        ///  add keylogRoot valuec:\\serviceLog/        /// /appSettings        /// /summary        /// param nameWebServiceType网络服务的类型/param        /// returns用于保存日志记录的文件路径/returns        public override object GetInitializer(Type WebServiceType)        {            //return LogRoot.TrimEnd(\\)  \\  WebServiceType.FullName  .log;            return LogRoot.TrimEnd(\\)\\ WebServiceType.FullName  .log;        }        //获得文件名并将其保存下来        public override void Initialize(object initializer)        {            filename  (string)initializer;        }       /// summary       /// 当数据还为Soap格式的时候将数据写入日志       /// /summary       /// param namemessage/param        public override void ProcessMessage(SoapMessage message)        {            switch (message.Stage)            {                case SoapMessageStage.BeforeSerialize:                    break;                case SoapMessageStage.AfterSerialize:                    WriteOutput(message);                    break;                case SoapMessageStage.BeforeDeserialize:                    WriteInput(message);                    break;                case SoapMessageStage.AfterDeserialize:                    break;                default:                    throw new Exception(invalid stage);            }        }        /// summary        /// 将SoapMessage写入到日志文件        /// /summary        /// param namemessage/param        public void WriteOutput(SoapMessage message)        {            newStream.Position  0;             //创建或追加记录文件            FileStream fs  new FileStream(filename, FileMode.Append,                FileAccess.Write);            StreamWriter w  new StreamWriter(fs);            string soapString  (message is SoapServerMessage) ? Soap响应 : Soap请求;            w.WriteLine(-----  soapString   在   DateTime.Now.ToString(yyyy年MM月dd日 HH时mm分ss秒));            w.Flush();            Copy(newStream, fs);            w.Close();            newStream.Position  0;            Copy(newStream, oldStream);        }        public void WriteInput(SoapMessage message)        {            Copy(oldStream, newStream);            FileStream fs  new FileStream(filename, FileMode.Append,                FileAccess.Write);            StreamWriter w  new StreamWriter(fs);            string soapString  (message is SoapServerMessage) ?                 Soap请求 : Soap响应;            w.WriteLine(-----  soapString                  在   DateTime.Now.ToString(yyyy年MM月dd日 HH时mm分ss秒));            w.Flush();            newStream.Position  0;            Copy(newStream, fs);            w.Close();            newStream.Position  0;        }        /// summary        /// 拷贝流到流        /// /summary        /// param namefrom/param        /// param nameto/param        void Copy(Stream from, Stream to)        {            TextReader reader  new StreamReader(from);            TextWriter writer  new StreamWriter(to);            writer.WriteLine(reader.ReadToEnd());            writer.Flush();        }    }    //创建一个用于在WebMethod上使用的SoapExtension属性    [AttributeUsage(AttributeTargets.Method)]    public class TraceExtensionAttribute : SoapExtensionAttribute    {        private string filename  c:\\log.txt;        private int priority;        /// summary        /// 扩展类型        /// /summary        public override Type ExtensionType        {            get { return typeof(TraceExtension); }        }        /// summary        /// 优先级         /// /summary        public override int Priority        {            get { return priority; }            set { priority  value; }        }        /// summary        /// 用于记录该WebMethod的SoapMessage的文件的绝对路径        /// 默认为c:\\log.txt;        /// /summary        public string Filename        {            get            {                return filename;            }            set            {                filename  value;            }        }    }   } 结下来介绍一个如何使用该类: 如果要使让TraceExtension支持第一种记录方式需要作的额外工作为: 只需要在要记录SoapMessage的WebMethod添加如下的Attribute[TraceExtension(Filenamed:\\data.xml,Priority0)]当然路径您可以自己设定前一节的WebMethod就变成了添加了针对WebMethod日志记录的WebMethod public MySoapHeader header  new MySoapHeader();                [WebMethod]        [SoapHeader(header)]           [TraceExtension(Filenamed:\\data.xml,Priority0)]        public string HelloWorld()        {            if (header  null)            {                return 您没有设置SoapHeader,不能正常访问此服务!;            }            if (header.UserName ! jillzhang || header.Pwd ! 123456)            {                return 您提供的身份验证信息有误不能正常访问此服务!;            }            return Hello World;        } 调用下该WebService便在d盘产生一个data.xml文件里面的内容为:日志记录-----Soap请求 在 2007年05月25日 09时06分29秒?xml version1.0 encodingutf-8?soap:Envelope xmlns:soaphttp://schemas.xmlsoap.org/soap/envelope/ xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:xsdhttp://www.w3.org/2001/XMLSchemasoap:HeaderMySoapHeader xmlnshttp://tempuri.org/UserNamejillzhang/UserNamePwd123456/Pwd/MySoapHeader/soap:Headersoap:BodyHelloWorld xmlnshttp://tempuri.org/ //soap:Body/soap:Envelope-----Soap响应 在 2007年05月25日 09时06分29秒?xml version1.0 encodingutf-8?soap:Envelope xmlns:soaphttp://schemas.xmlsoap.org/soap/envelope/ xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:xsdhttp://www.w3.org/2001/XMLSchemasoap:BodyHelloWorldResponse xmlnshttp://tempuri.org/HelloWorldResultHello World/HelloWorldResult/HelloWorldResponse/soap:Body/soap:Envelope 如何采用第二种方法让WebService的每个WebMethod都能记录日志需要在Web.config中作如下的设定首先添加如下节点 webServices        soapExtensionTypes          add typeJillzhang.TraceExtension,Jillzhang priority1  groupHigh  /        /soapExtensionTypes      /webServices 然后通过配置设定日志文件保留的路径 appSettings    add keylogRoot valued:/  /appSettings 找到日志文件,里面也赫然有着SoapMessage的真面目。通过以上方法大家可以清晰地分析到SoapMessage的具体格式和内容知道了这个以后对付Web Service您就可以随心应手随心所欲如果你愿意你甚至也可以“强奸一次webservice,哈哈!上一篇文章地址构建安全的Xml Web Service系列一之初探使用Soap头 (5-22 12:53) 附终于买上房了虽然买的过程很累但现在还是很Happy!
http://www.huolong8.cn/news/175040/

相关文章:

  • 电商专业培训网站建设自贡网站推广
  • 银川网站建设nx110网站换空间商什么意思
  • 中山网站建设文化效果做网站制作一般多少钱
  • 工程建设资料员报名网站如何做影视网站的标题
  • 企业网站设计的方案网站开发毕设论文
  • 网站开发后端做什么白城网站建设公司
  • 中通建设计院第四分公司网站青岛注册公司网站
  • 个人做网站要买什么域名vue php 哪个做网站 好
  • 做手机网站多少钱沈阳网站制作服务
  • 简约网站欣赏网站建设企划
  • 如何整理做网站的素材德阳装修公司
  • 珠海网站建设哪家公司好更换网站后台管理系统
  • 主流搭建网站大型门户类网站
  • 广州车陂网站建设公司哪里制作网站好
  • 做网站难千万不要报培训班学室内设计
  • 做百度手机网站优化织梦仿视频网站模板
  • 商城网站建设推荐无限免费视频直播
  • 鄂州网站建设推广报价长沙公交优化
  • 做网站人员有什么名称电商直播平台网站开发
  • wordpress自动发布网站只做自己网站
  • 烟台网站建设招聘创立制作网站公司
  • 网站设计评语个人做跨境电商的平台网站有哪些
  • 湖北网站开发启东做网站的网络公司有哪些
  • 怎么制作一个网站及小程序设计制作售卖
  • 公司注册网站怎么做重庆新增10个高风险区
  • 渭南做网站博创互联网站产品展示怎么做
  • 电子商务网站建设平台大连网站建设好的公司
  • 辽源做网站的公司网页设计心得体会学会了什么
  • 检测WordPress主题的网站海南网络
  • 怎么创建音乐网站wordpress简洁博客模板