<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[P2P/FMS/C#/Ajax/SEO/项目技术/健康营养]]></title>
<link>http://www.loverer.com/</link>
<description><![CDATA[因为有梦，才会去学习飞翔]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[ctv0071#hotmail.com(Dreamfly)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>P2P/FMS/C#/Ajax/SEO/项目技术/健康营养</title> 
	<url>http://www.loverer.com/images/logos.gif</url> 
	<link>http://www.loverer.com/</link> 
	<description>P2P/FMS/C#/Ajax/SEO/项目技术/健康营养</description> 
</image>

			<item>
			<link>http://www.loverer.com/default.asp?id=444</link>
			<title><![CDATA[用C#.net轻松制作不规则窗体]]></title>
			<author>ctv0071#hotmail.com(ym110)</author>
			<category><![CDATA[.Net技术]]></category>
			<pubDate>Wed,10 Dec 2008 09:15:14 +0800</pubDate>
			<guid>http://www.loverer.com/default.asp?id=444</guid>	
		<description><![CDATA[&nbsp;1.绘制不规则窗体位图&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;2.设置窗体基本属性<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;3.编写窗体相关代码&nbsp;&nbsp;（要实现窗口的关闭，移动等操作）&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;1.绘制不规则窗体位图&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可以使用任意一种你喜欢的作图工具，制作一个有形状的位图，背景使用一种其他的颜色。这个颜色在编程中用得着，所以最好使用一种容易记忆的颜色。<br/><br/>如图下图，本例中使用的背景色为黄色（#ffff00/yellow）,文件名为bk.bmp<br/><br/>&nbsp;<br/><br/>&nbsp;&nbsp;2.创建windows窗体并设置窗体基本属性<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&gt;新建windows应用程序<br/><br/><br/>&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2&gt;选中新建的窗体，设置其相应属性：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（1）。将&nbsp;FormBorderStyle&nbsp;属性设置为&nbsp;None。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（2）。将窗体的&nbsp;BackgroundImage&nbsp;属性设置为先前创建的位图文件。不必将文件添加到项目系统中；这将在指定该文件作为背景图像时自动完成。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（3）。将&nbsp;TransparencyKey&nbsp;属性设置为位图文件的背景色，本例中为黄色。（此属性告诉应用程序窗体中的哪些部分需要设置为透明。&nbsp;）<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这时你就可以按F5测试你的程序，可以看到如图所示的窗体。现在窗体还不能拖动，只能通过结束程序，或者alt+F4关闭。下面我们编写相应的代码来实现标题栏的相应功能。<br/><br/>&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;3.编写窗体相关代码<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（要实现窗口的关闭，移动等操作）<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（1）。实现窗口关闭<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从工具栏中拖进一个按钮，设置其按钮文字为“×”，设置其大小为合适大小。双击该按钮进入其触发时间函数。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;写入如下代码：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.Close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//关闭本窗体<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（2）。设置窗体的移动操作，我们要用到两个全局的变量<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Point&nbsp;mouseOffset;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//记录鼠标指针的坐标<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;bool&nbsp;isMouseDown&nbsp;=&nbsp;false;&nbsp;//记录鼠标按键是否按下<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建该窗体&nbsp;MouseDown事件的相应处理程序。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;Form1_MouseDown(object&nbsp;sender,&nbsp;System.Windows.Forms.MouseEventArgs&nbsp;e)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;xOffset;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;yOffset;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(e.Button&nbsp;==&nbsp;MouseButtons.Left)&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xOffset&nbsp;=&nbsp;-e.X&nbsp;-&nbsp;SystemInformation.FrameBorderSize.Width;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yOffset&nbsp;=&nbsp;-e.Y&nbsp;-&nbsp;SystemInformation.CaptionHeight&nbsp;-&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SystemInformation.FrameBorderSize.Height;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mouseOffset&nbsp;=&nbsp;new&nbsp;Point(xOffset,&nbsp;yOffset);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isMouseDown&nbsp;=&nbsp;true;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建该窗体的&nbsp;MouseMove事件的相应处理程序<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;Form1_MouseMove(object&nbsp;sender,&nbsp;System.Windows.Forms.MouseEventArgs&nbsp;e)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isMouseDown)&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Point&nbsp;mousePos&nbsp;=&nbsp;Control.MousePosition;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mousePos.Offset(mouseOffset.X,&nbsp;mouseOffset.Y);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Location&nbsp;=&nbsp;mousePos;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建该窗体的MouseUp事件的相应处理程序<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;Form1_MouseUp(object&nbsp;sender,&nbsp;System.Windows.Forms.MouseEventArgs&nbsp;e)<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;修改鼠标状态isMouseDown的值<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;确保只有鼠标左键按下并移动时，才移动窗体<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(e.Button&nbsp;==&nbsp;MouseButtons.Left)&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isMouseDown&nbsp;=&nbsp;false;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（3）。加入相应的其他的控件<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其他的就是看你自己的需要，来添加控件，实现自己想要实现的功能。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本例中添加了一文本框，设置其背景为黄色，所以显示时也成了透明的。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.loverer.com/default.asp?id=443</link>
			<title><![CDATA[c#窗体圆角透明效果]]></title>
			<author>ctv0071#hotmail.com(ym110)</author>
			<category><![CDATA[.Net技术]]></category>
			<pubDate>Wed,10 Dec 2008 09:12:02 +0800</pubDate>
			<guid>http://www.loverer.com/default.asp?id=443</guid>	
		<description><![CDATA[using&nbsp;System;<br/>using&nbsp;System.Collections.Generic;<br/>using&nbsp;System.ComponentModel;<br/>using&nbsp;System.Data;<br/>using&nbsp;System.Drawing;<br/>using&nbsp;System.Text;<br/>using&nbsp;System.Windows.Forms;<br/>using&nbsp;System.Drawing.Drawing2D;<br/><br/>namespace&nbsp;yjct<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;partial&nbsp;class&nbsp;Form1&nbsp;:&nbsp;Form<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Form1()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;Form1_Resize(object&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type(this,&nbsp;25,&nbsp;0.1);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;Type(Control&nbsp;sender,&nbsp;int&nbsp;p_1,&nbsp;double&nbsp;p_2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GraphicsPath&nbsp;oPath&nbsp;=&nbsp;new&nbsp;GraphicsPath();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oPath.AddClosedCurve(new&nbsp;Point[]&nbsp;{&nbsp;new&nbsp;Point(0,&nbsp;sender.Height&nbsp;/&nbsp;p_1),&nbsp;new&nbsp;Point(sender.Width&nbsp;/&nbsp;p_1,&nbsp;0),&nbsp;new&nbsp;Point(sender.Width&nbsp;-&nbsp;sender.Width&nbsp;/&nbsp;p_1,&nbsp;0),&nbsp;new&nbsp;Point(sender.Width,&nbsp;sender.Height&nbsp;/&nbsp;p_1),&nbsp;new&nbsp;Point(sender.Width,&nbsp;sender.Height&nbsp;-&nbsp;sender.Height&nbsp;/&nbsp;p_1),&nbsp;new&nbsp;Point(sender.Width&nbsp;-&nbsp;sender.Width&nbsp;/&nbsp;p_1,&nbsp;sender.Height),&nbsp;new&nbsp;Point(sender.Width&nbsp;/&nbsp;p_1,&nbsp;sender.Height),&nbsp;new&nbsp;Point(0,&nbsp;sender.Height&nbsp;-&nbsp;sender.Height&nbsp;/&nbsp;p_1)&nbsp;},&nbsp;(float)p_2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sender.Region&nbsp;=&nbsp;new&nbsp;Region(oPath);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;Form1_Paint(object&nbsp;sender,&nbsp;PaintEventArgs&nbsp;e)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type(this,&nbsp;25,&nbsp;0.1);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.loverer.com/default.asp?id=442</link>
			<title><![CDATA[App.Config文件的读写()]]></title>
			<author>ctv0071#hotmail.com(ym110)</author>
			<category><![CDATA[.Net技术]]></category>
			<pubDate>Wed,10 Dec 2008 09:08:16 +0800</pubDate>
			<guid>http://www.loverer.com/default.asp?id=442</guid>	
		<description><![CDATA[using&nbsp;System;<br/>using&nbsp;System.Collections.Generic;<br/>using&nbsp;System.Text;<br/>using&nbsp;System.Configuration;<br/>using&nbsp;System.Collections;<br/><br/>namespace&nbsp;ServicesConfiguration<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;ConfigurationDispose<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ConfigurationDispose()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetConfigurationGetConfiguration#region&nbsp;GetConfiguration<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**//**//**////&nbsp;&lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;取得appSettings里的值<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&#34;key&#34;&gt;键&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;returns&gt;值&lt;/returns&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;string&nbsp;GetConfiguration(string&nbsp;key)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ConfigurationManager.AppSettings[key];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#endregion<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetConfigurationListGetConfigurationList#region&nbsp;GetConfigurationList<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**//**//**////&nbsp;&lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;取得appSettings里的值列表<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&#34;filePath&#34;&gt;配置文件路径&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;returns&gt;值列表&lt;/returns&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;KeyValueConfigurationCollection&nbsp;GetConfigurationList(string&nbsp;filePath)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AppSettingsSection&nbsp;appSection&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AppSection对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;configuration&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Configuration对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyValueConfigurationCollection&nbsp;k&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//返回的键值对类型<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configuration&nbsp;=&nbsp;ConfigurationManager.OpenExeConfiguration(filePath);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取得AppSettings节<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appSection&nbsp;=&nbsp;(AppSettingsSection)configuration.Sections[&#34;appSettings&#34;];<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取得AppSetting节的键值对<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;=&nbsp;appSection.Settings;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;k;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#endregion<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetConfigurationSetConfiguration#region&nbsp;SetConfiguration<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**//**//**////&nbsp;&lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;设置appSetting的值<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&#34;key&#34;&gt;键&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&#34;value&#34;&gt;值&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&#34;filePath&#34;&gt;App.config文件路径&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;SetConfiguration(string&nbsp;key,&nbsp;string&nbsp;value,string&nbsp;filePath)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configuration&nbsp;configuration&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Configuration对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AppSettingsSection&nbsp;appSection&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AppSection对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configuration&nbsp;=&nbsp;ConfigurationManager.OpenExeConfiguration(filePath);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//取得AppSetting节<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appSection&nbsp;=&nbsp;configuration.AppSettings;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//赋值并保存<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appSection.Settings[key].Value&nbsp;=&nbsp;value;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configuration.Save();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#endregion<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetConfigurationSetConfiguration#region&nbsp;SetConfiguration<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**//**//**////&nbsp;&lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;设置appSetting的值<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&#34;key&#34;&gt;键&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;param&nbsp;name=&#34;value&#34;&gt;值&lt;/param&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;SetConfiguration(string&nbsp;key,&nbsp;string&nbsp;value)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AppSettingsSection&nbsp;appSection&nbsp;=&nbsp;null;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//AppSection对象<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appSection&nbsp;=&nbsp;ConfigurationManager.GetSection(&#34;appSettings&#34;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;appSection.Settings[key].Value&nbsp;=&nbsp;value;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#endregion<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>}&nbsp;<br/><br/>&nbsp;<br/><br/>自己做的小例子，很简单，就是一个读取其中配置信息<br/><br/>&nbsp;<br/><br/>App.Config&nbsp;<br/><br/><br/>&lt;?xml&nbsp;version=&#34;1.0&#34;&nbsp;encoding=&#34;utf-8&#34;&nbsp;?&gt;<br/>&lt;configuration&gt;<br/>&nbsp;&nbsp;&lt;appSettings&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;add&nbsp;key=&#34;User&#34;&nbsp;value=&#34;Mgod&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&lt;/appSettings&gt;<br/><br/>&lt;/configuration&gt;<br/>&nbsp;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.loverer.com/default.asp?id=441</link>
			<title><![CDATA[(zt)使用Reflactor反编译.Net程序的经验]]></title>
			<author>ctv0071#hotmail.com(ym110)</author>
			<category><![CDATA[.Net技术]]></category>
			<pubDate>Wed,03 Dec 2008 09:35:13 +0800</pubDate>
			<guid>http://www.loverer.com/default.asp?id=441</guid>	
		<description><![CDATA[相信大多数.Net程序员都有使用Reflactor的经历。无论出于什么目的，当用Reflactor反编译托管程序后，还想对其代码加以修改，那么本文所列举的可能是一份有用的参考。<br/><br/><br/>用Reflactor的FileGenerator插件反编译代码后可以得到包括项目文件的源代码，但代码中存在各种问题，一般无法一次编译通过，以下将详谈这些问题：<br/><br/><br/>枚举问题<br/><br/><br/>为了代码可读，可能需要花点时间查阅metadata把int值修改回枚举值，尤其是想利用窗体设计器的，VS2008可能还不理解int值。<br/><br/><br/>属性问题<br/><br/><br/>比如一个叫Names的属性被反编译后，可能还原为的set_Names(names)，get_Names()方法，逐个替换可能很慢，可采用正则表达式整体替换。<br/>对于set_Xxx(xxx)方法，可替换<br/>set_{[a-z]*}\(<br/>为<br/>\1&nbsp;=&nbsp;(<br/>对于get_Xxx()方法，可替换<br/>get_{[a-z]*}\(\)<br/>为<br/>\1<br/>然后，再修复个别被误换的方法。<br/><br/><br/>委托和回调函数问题<br/><br/><br/>一般会被还原为add_Xxx(MethodsName)方法，需要改为&nbsp;+=&nbsp;MethodsName<br/><br/><br/>资源问题<br/><br/><br/>需要使用.Net&nbsp;Framework&nbsp;SDK&nbsp;下的&nbsp;resgen.exe&nbsp;工具，反编译嵌入资源文件*.resources为*.resx文件，<br/>语法为：ResGen.exe&nbsp;*.resources&nbsp;*.resx，然后将*.resx包含入项目，就会自动和同名的窗体文件*.cs关联，如果没有关联可采用先排除再添加大法，一一搞定。<br/><br/><br/>命名空间问题<br/><br/><br/>如果需要切换到IDE的窗体设计器，而不出错，则还需要在*.cs中添加比如System.Windows.Forms的命名空间前缀。<br/><br/><br/>窗体设计器识别问题<br/><br/><br/>需要把以下代码<br/>ComponentResourceManager&nbsp;manager&nbsp;=&nbsp;new&nbsp;ComponentResourceManager(typeof(ClassName));<br/>替换为<br/>System.ComponentModel.ComponentResourceManager&nbsp;resources&nbsp;=&nbsp;new&nbsp;System.ComponentModel.ComponentResourceManager(typeof(ClassName));<br/>窗体设计器才能正常识别。<br/><br/><br/>来源<br/><a href="http://www.cnblogs.com/likun/archive/2008/08/11/1265008.html" target="_blank">http://www.cnblogs.com/likun/archive/2008/08/11/1265008.html</a>&nbsp;<br/>(存档下，便于以后查阅）]]></description>
		</item>
		
			<item>
			<link>http://www.loverer.com/default.asp?id=440</link>
			<title><![CDATA[C#--警告～～已过时解决办法]]></title>
			<author>ctv0071#hotmail.com(ym110)</author>
			<category><![CDATA[.Net技术]]></category>
			<pubDate>Mon,11 Aug 2008 13:26:41 +0800</pubDate>
			<guid>http://www.loverer.com/default.asp?id=440</guid>	
		<description><![CDATA[1“System.Configuration.ConfigurationSettings.GetConfig(string)”已过时<br/><br/>警告“System.Configuration.ConfigurationSettings.GetConfig(string)”已过时:“This&nbsp;method&nbsp;is&nbsp;obsolete,&nbsp;it&nbsp;has&nbsp;been&nbsp;replaced&nbsp;by&nbsp;System.Configuration!System.Configuration.ConfigurationManager.GetSection”<br/><br/>警告&nbsp;&nbsp;&nbsp;1&nbsp;“System.Configuration.ConfigurationSettings.AppSettings”已过时:“This&nbsp;method&nbsp;is&nbsp;obsolete,&nbsp;it&nbsp;has&nbsp;been&nbsp;replaced&nbsp;by&nbsp;System.Configuration!System.Configuration.ConfigurationManager.AppSettings”&nbsp;<br/><br/>注意:默认没有引用ConfigurationManager类，所以找不到System.Configuration命名空间的&nbsp;ConfigurationManager类.<br/><br/>解决:首先添加对System.Configuration.dll&nbsp;文件的引用;其次再将&#34;System.Configuration.ConfigurationSettings.GetConfig替换为System.Configuration.ConfigurationManager.GetSection<br/><br/>将“System.Configuration.ConfigurationSettings.AppSettings”替换为System.Configuration.ConfigurationManager.AppSettings”&nbsp;<br/><br/><br/>MS对这一点提示比较隐晦而已——<br/>This&nbsp;method&nbsp;is&nbsp;obsolete,&nbsp;it&nbsp;has&nbsp;been&nbsp;replaced&nbsp;by&nbsp;System.Configuration!System.Configuration.ConfigurationManager.AppSettings<br/>上面那段话多了System.Configuration!<br/><br/>2&nbsp;警告“System.Web.UI.Page.RegisterClientScriptBlock(string,&nbsp;string)”已过时<br/><br/>警告“System.Web.UI.Page.RegisterClientScriptBlock(string,&nbsp;string)”已过时:“The&nbsp;recommended&nbsp;alt&#101;rnative&nbsp;is&nbsp;ClientScript.RegisterClientScriptBlock(Type&nbsp;type,&nbsp;string&nbsp;key,&nbsp;string&nbsp;script).&nbsp;<a href="http://go.microsoft.com/fwlink/?linkid=14202" target="_blank">http://go.microsoft.com/fwlink/?linkid=14202</a>”<br/>如果出现类似的警告，则应该这样处理：<br/>如你的警告代码为：<br/>RegisterClientScriptBlock(&#34;&#34;,&nbsp;&#34;&lt;script&nbsp;language=javascript&gt;window.open(&#39;../Issue/IssueAllComment.aspx&#39;)&lt;/script&gt;&#34;);<br/>目的是要新弹出页面。<br/>可以改为：<br/>ClientScript.RegisterStartupScript(this.GetType(),&nbsp;&#34;&#34;,&nbsp;&#34;&lt;script&gt;window.open(&#39;../Issue/IssueAllComment.aspx&#39;);&lt;/script&gt;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.HyperLink_AmendDocument.NavigateUrl&nbsp;=&nbsp;&#34;AccessoriesAdd.aspx&#34;;<br/><br/><br/><br/>&lt;script&nbsp;type=&#34;text/javascript&#34;&gt;&nbsp;<br/>function&nbsp;mainThemeWordSel&#101;ct()&nbsp;<br/>{&nbsp;<br/>window.open(&#34;ThemeWordSel&#101;ct.aspx&#34;,&#34;_blank&#34;,&nbsp;&#34;toolbar=no,resizable=yes,scrollbars=yes&#34;);&nbsp;<br/>}&nbsp;<br/>&lt;/script&gt;&nbsp;<br/>想让服务器控件LinkButton被点击时执行这脚本，后台代码这样写的&nbsp;<br/>protected&nbsp;void&nbsp;lbMainTheme_Click(object&nbsp;sender,&nbsp;EventArgs&nbsp;e)&nbsp;<br/>{&nbsp;<br/>Page.RegisterStartupScript(&#34;sds&#34;,&nbsp;&#34;&lt;script&nbsp;language=&#39;javascript&#39;&gt;mainThemeWordSel&#101;ct();&lt;&#34;&nbsp;+&nbsp;&#34;/script&gt;&#34;);&nbsp;<br/><br/>}&nbsp;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.loverer.com/default.asp?id=439</link>
			<title><![CDATA[自定义身份验证Soap头 进行加密解密 ]]></title>
			<author>ctv0071#hotmail.com(ym110)</author>
			<category><![CDATA[.Net技术]]></category>
			<pubDate>Mon,07 Jul 2008 17:41:18 +0800</pubDate>
			<guid>http://www.loverer.com/default.asp?id=439</guid>	
		<description><![CDATA[在上篇文章中我们了解了使用自定义SOAP头进行身份验证，使webService服务的身份验证变得灵活，简便。<br/>但是是以明文的方式在网上传输，不能保在传输的过程中被别人截取。所以，为了保证安全性我们必须对，Soap头进行加密，密文的方式传输。<br/>&nbsp;<br/>&nbsp;&nbsp;废话就不多说了，下面我们&nbsp;看看下面的简单的例子：<br/><br/>&nbsp;&nbsp;首先我们在客户端进行对数据的加密：这里我们使用的是64位DES加密算法。<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;设置密钥（Key）和初始值（IV）可放在配置文件中：<br/>&nbsp;&nbsp;&lt;appSettings&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;add&nbsp;key=&#34;Key&#34;&nbsp;value=&#34;fdautoit&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;add&nbsp;key=&#34;IV&#34;&nbsp;value=&#34;FDAUTOIT&#34;/&gt;<br/>&nbsp;&nbsp;&lt;/appSettings&gt;<br/>*注：上面的值只有8个字节（64位）<br/>在.cs文件中获取“Key”和“IV”<br/>string&nbsp;Key,&nbsp;Iv;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Key&nbsp;=&nbsp;ConfigurationManager.AppSettings[&#34;Key&#34;];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iv&nbsp;=&nbsp;ConfigurationManager.AppSettings[&#34;IV&#34;];<br/><br/>定义一个加密方法：<br/>private&nbsp;string&nbsp;Encrypt(string&nbsp;p_strEncrypt)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Set&nbsp;the&nbsp;Key&nbsp;and&nbsp;the&nbsp;InitialVector&nbsp;for&nbsp;Encrypt<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;key&nbsp;=&nbsp;Encoding.UTF8.GetBytes(Key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;iv&nbsp;=&nbsp;Encoding.UTF8.GetBytes(Iv);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Convent&nbsp;the&nbsp;string&nbsp;to&nbsp;byte[]&nbsp;of&nbsp;the&nbsp;Data<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;byteData=Encoding.UTF8.GetBytes(p_strEncrypt);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Set&nbsp;Memory&nbsp;space&nbsp;for&nbsp;save&nbsp;the&nbsp;Data<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemoryStream&nbsp;memoryData&nbsp;=&nbsp;new&nbsp;MemoryStream();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DES&nbsp;des&nbsp;=&nbsp;new&nbsp;DESCryptoServiceProvider();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RC2&nbsp;des&nbsp;=&nbsp;new&nbsp;RC2CryptoServiceProvider();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Rijndael&nbsp;des&nbsp;=&nbsp;new&nbsp;RijndaelManaged();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TripleDES&nbsp;des&nbsp;=&nbsp;new&nbsp;TripleDESCryptoServiceProvider();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;des.Key&nbsp;=&nbsp;key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;des.IV&nbsp;=&nbsp;iv;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;des.Mode&nbsp;=&nbsp;CipherMode.CBC;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Cr&#101;ate&nbsp;&nbsp;the&nbsp;Method&nbsp;with&nbsp;the&nbsp;Key&nbsp;and&nbsp;IV&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICryptoTransform&nbsp;transform&nbsp;=&nbsp;des.Cr&#101;ateEncryptor();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Cr&#101;ate&nbsp;the&nbsp;EnCrypt&nbsp;stream<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CryptoStream&nbsp;cryptostream&nbsp;=&nbsp;new&nbsp;CryptoStream(memoryData,&nbsp;transform,&nbsp;CryptoStreamMode.Write);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//write&nbsp;into&nbsp;the&nbsp;Memory&nbsp;stream<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cryptostream.Write(byteData,&nbsp;0,&nbsp;byteData.Length);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;Exception(&#34;Encrypt&nbsp;Data&nbsp;wrong&nbsp;of&nbsp;the&nbsp;write&nbsp;to&nbsp;stream!&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cryptostream.FlushFinalBlock();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cryptostream.Close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//return&nbsp;memoryData.ToString();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Convert.ToBase64String(memoryData.ToArray());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}在这个方法返回的是一个加密后的数据。&nbsp;private&nbsp;void&nbsp;ValidServiceMethod()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Encrypt&nbsp;the&nbsp;username&nbsp;and&nbsp;password&nbsp;of&nbsp;SoapHeader<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;m_strName&nbsp;=&nbsp;Encrypt(&#34;admin&#34;,EncryptionAlgorithm.Des);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;m_strPwd&nbsp;=&nbsp;Encrypt(&#34;admin&#34;,EncryptionAlgorithm.Des);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//new&nbsp;a&nbsp;&nbsp;SoapHeader&nbsp;and&nbsp;a&nbsp;WebService<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySoapHeader&nbsp;myheader&nbsp;=&nbsp;new&nbsp;MySoapHeader&nbsp;();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyService&nbsp;myservice&nbsp;=&nbsp;new&nbsp;MyService();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myheader.UserName&nbsp;=&nbsp;m_strName;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myheader.PassWord&nbsp;=&nbsp;m_strPwd;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Set&nbsp;the&nbsp;SoapHeader&nbsp;validate&nbsp;to&nbsp;Service<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myservice.FDSoapHeaderValue&nbsp;=&nbsp;myheader&nbsp;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Call&nbsp;Method&nbsp;of&nbsp;webservice&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myservice.GetMoney();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/><br/><br/>&nbsp;&nbsp;这样就完成了加密的过程（用户名，密码，数据可以以参数的形式传入）<br/>在服务&nbsp;器端同样设置配置文件。这于客户端的是一模一样的。<br/>&lt;appSettings&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;add&nbsp;key=&#34;Key&#34;&nbsp;value=&#34;fdautoit&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;add&nbsp;key=&#34;IV&#34;&nbsp;value=&#34;FDAUTOIT&#34;/&gt;<br/>&nbsp;&nbsp;&lt;/appSettings&gt;同样在代码文件中获取其值<br/>&nbsp;&nbsp;编写解密方法：<br/>&nbsp;private&nbsp;string&nbsp;Decrypt(string&nbsp;p_strDecrypt)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Set&nbsp;the&nbsp;Key&nbsp;and&nbsp;the&nbsp;InitialVector&nbsp;for&nbsp;Decrypt<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;key&nbsp;=&nbsp;Encoding.UTF8.GetBytes(Key);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;iv&nbsp;=&nbsp;Encoding.UTF8.GetBytes(Iv);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Covent&nbsp;the&nbsp;string&nbsp;to&nbsp;byte[]&nbsp;with&nbsp;the&nbsp;Encrypt&nbsp;Data<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//byte[]&nbsp;EncrypData&nbsp;=Encoding.UTF8.GetBytes(p_strDecrypt);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;EncrypData=Convert.FromBase64String(p_strDecrypt);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Set&nbsp;the&nbsp;Memory&nbsp;stream&nbsp;Space&nbsp;for&nbsp;save&nbsp;data<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MemoryStream&nbsp;memoryData&nbsp;=&nbsp;new&nbsp;MemoryStream();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Cr&#101;ate&nbsp;DES&nbsp;for&nbsp;Decrypt<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DESCryptoServiceProvider&nbsp;des&nbsp;=&nbsp;new&nbsp;DESCryptoServiceProvider();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;des.Key&nbsp;=&nbsp;key;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;des.IV&nbsp;=&nbsp;iv;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;des.Mode&nbsp;=&nbsp;CipherMode.CBC;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Decrypt&nbsp;with&nbsp;the&nbsp;key&nbsp;and&nbsp;InitialVector<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICryptoTransform&nbsp;transform&nbsp;=&nbsp;des.Cr&#101;ateDecryptor();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Save&nbsp;to&nbsp;MemoryStream<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CryptoStream&nbsp;cryptostream&nbsp;=&nbsp;new&nbsp;CryptoStream(memoryData,&nbsp;transform,&nbsp;CryptoStreamMode.Write);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//output&nbsp;the&nbsp;data<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cryptostream.Write(EncrypData,&nbsp;0,&nbsp;EncrypData.Length);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(Exception&nbsp;ex)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;Exception(&#34;write&nbsp;to&nbsp;stream&nbsp;wrong!&#34;+ex.Message);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cryptostream.FlushFinalBlock();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cryptostream.Close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//output&nbsp;data<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Encoding.UTF8.GetString(memoryData.ToArray());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;<br/><br/>Soap头:<br/>&nbsp;public&nbsp;class&nbsp;MySoapHeader&nbsp;:&nbsp;SoapHeader<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;_name;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;_passWord;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;UserName&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;_name;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;_name&nbsp;=&nbsp;value;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;PassWord<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;_passWord;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;_passWord&nbsp;=&nbsp;value;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>更改上篇中的方法：<br/><br/>&nbsp;public&nbsp;bool&nbsp;ValiHeader(out&nbsp;string&nbsp;ReturnMsg)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySoapHeader&nbsp;myheader=new&nbsp;MySoapHeader();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;flag&nbsp;=&nbsp;false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;UserName=Decrypt(myheader.UserName);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;PassWord=Decrypt(myheader.PassWord);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(UserName&nbsp;==&nbsp;&#34;admin&#34;&nbsp;&amp;&amp;&nbsp;PassWord&nbsp;==&nbsp;&#34;admin&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReturnMsg&nbsp;=&nbsp;&#34;You&nbsp;Are&nbsp;Successfully&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReturnMsg&nbsp;=&nbsp;&#34;You&nbsp;Are&nbsp;Failted&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;flag;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>[WebMethod]<br/>[SoapHeader(&#34;header&#34;,&nbsp;Direction&nbsp;=&nbsp;SoapHeaderDirection.In)]<br/>public&nbsp;string&nbsp;CheckHeader()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;ReturnMsg=&#34;&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;IsTrue=ValiHeader(out&nbsp;&nbsp;ReturnMsg);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ReturnMsg;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>如果方法：“ValiHeader”返回的是true&nbsp;表示验证成功，如果返回的是false表示用户名和密码有误。<br/><br/><br/>有关SoapHeader验证头密码核心代码就&nbsp;是这样了。其中省略了很多代码。]]></description>
		</item>
		
			<item>
			<link>http://www.loverer.com/default.asp?id=438</link>
			<title><![CDATA[使用Soap头自定义身份验证 ]]></title>
			<author>ctv0071#hotmail.com(ym110)</author>
			<category><![CDATA[.Net技术]]></category>
			<pubDate>Mon,07 Jul 2008 17:38:32 +0800</pubDate>
			<guid>http://www.loverer.com/default.asp?id=438</guid>	
		<description><![CDATA[&nbsp;&nbsp;在intranet场景下，Windows身份验证动作良好，并且开发人员可以在自身域中对用户进行身份验证。如果在Web.config文件中将WEB服务设置为WINDOWS身份验证模式，那么必须为每一个用户创建一个本地几户或域账户。对于拥有大量用户的应用程序来说，这不是一个实用的解决方案，美工豕对于Internet上的应用程序来说这是不可能实现的。对Internet而言，可能需要根据结构化查询语言（SQL）数据库来执行自定身份验证和授权。在这种情况下应该向WEB传递自定凭据（例如用户名或密码），并让WEB服务处理身份验证和授权。<br/>&nbsp;&nbsp;&nbsp;&nbsp;这时候我可以用一种比较简便的方法－－使用SOAP头。WEB服务消费者在SOAP头中添加用户ID和密码信息，WEB服务方法会检索这些信息，并使用这些信息来执行自定义的验证从而调用相应的服务&nbsp;。<br/><br/>下面是一个简单的例子：<br/><br/>服务器端：<br/>using&nbsp;System;<br/>using&nbsp;System.Web;<br/>using&nbsp;System.Web.Services;<br/>using&nbsp;System.Web.Services.Protocols;<br/><br/>using&nbsp;System.Security.Principal;<br/>namespace&nbsp;test2<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;Summary&nbsp;description&nbsp;for&nbsp;Service1<br/>&nbsp;&nbsp;&nbsp;&nbsp;///&nbsp;&lt;/summary&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;[WebService(Namespace&nbsp;=&nbsp;&#34;<a href="http://tempuri.org/" target="_blank">http://tempuri.org/</a>&#34;)]<br/>&nbsp;&nbsp;&nbsp;&nbsp;[WebServiceBinding(ConformsTo&nbsp;=&nbsp;WsiProfiles.BasicProfile1_1)]<br/>&nbsp;&nbsp;&nbsp;&nbsp;[ToolboxItem(false)]<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;Service1&nbsp;:&nbsp;System.Web.Services.WebService<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;&nbsp;ValidateUser&nbsp;valiUser&nbsp;=&nbsp;new&nbsp;ValidateUser();／／一定要是public访问类型。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[SoapHeader(&#34;valiUser&#34;)]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[WebMethod]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;GetAuthority()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;Msg=&#34;&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valiUser.ValiHeader(out&nbsp;Msg);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Msg;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;//<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;class&nbsp;ValidateUser:System.Web.Services.Protocols.SoapHeader<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//用户名和密码<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;string&nbsp;username;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;string&nbsp;password;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;UserName<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;username;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;username&nbsp;=&nbsp;value;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;PassWord<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;password;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;password&nbsp;=&nbsp;value;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;bool&nbsp;ValiHeader(out&nbsp;string&nbsp;ReturnMsg)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool&nbsp;flag&nbsp;=&nbsp;false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(UserName&nbsp;==&nbsp;&#34;admin&#34;&nbsp;&amp;&amp;&nbsp;PassWord&nbsp;==&nbsp;&#34;admin&#34;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag&nbsp;=&nbsp;true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReturnMsg&nbsp;=&nbsp;&#34;You&nbsp;Are&nbsp;Successfully&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReturnMsg&nbsp;=&nbsp;&#34;You&nbsp;Are&nbsp;Failted&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;flag;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/><br/>&nbsp;客户端：（我是写在一个按钮下面，向浏览器输出）<br/>&nbsp;protected&nbsp;void&nbsp;Button2_Click(object&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Service1&nbsp;service&nbsp;=&nbsp;new&nbsp;Service1();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ValidateUser&nbsp;valiUser&nbsp;=&nbsp;new&nbsp;ValidateUser();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valiUser.UserName&nbsp;=&nbsp;&#34;admin&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valiUser.PassWord&nbsp;=&nbsp;&#34;admin&#34;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.ValidateUserValue&nbsp;=&nbsp;valiUser;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Response.Write(service.GetAuthority());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>输出为：“You&nbsp;Are&nbsp;Successfully”<br/>注意：要使用SOAP头实现一个自定义身份验证方案，还必须在WEB服务的web.config文件中禁用其他的身份验证类型，如下所示：<br/>&lt;configuration&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;system.web&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;authentication&nbsp;mode=&#34;None&#34;/&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/system.web&gt;<br/>&lt;/configuration&gt;&nbsp;&nbsp;&nbsp;<br/><br/>当使用SOAP头传输凭据时，惟一必须解决的重要问题就是安全了，不过我们可以将SOAP头中身份信息进行强加密来解决这个问题。<br/>这将在我下一片文章中出现。<br/>&nbsp;&nbsp;<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.loverer.com/default.asp?id=437</link>
			<title><![CDATA[.NET脏字过滤算法收藏]]></title>
			<author>ctv0071#hotmail.com(ym110)</author>
			<category><![CDATA[.Net技术]]></category>
			<pubDate>Sat,05 Jul 2008 17:00:26 +0800</pubDate>
			<guid>http://www.loverer.com/default.asp?id=437</guid>	
		<description><![CDATA[使用原文中的脏字库，0x19c的字符串长度，1000次循环，文本查找耗时1933.47ms，RegEx用了1216.719ms，而我的算法只用了244.125ms.<br/><br/>　　主要算法如代码所示<br/>private&nbsp;static&nbsp;Dictionary&nbsp;dic&nbsp;=&nbsp;new&nbsp;Dictionary();&nbsp;<br/>private&nbsp;static&nbsp;BitArray&nbsp;fastcheck&nbsp;=&nbsp;new&nbsp;BitArray(char.MaxValue);&nbsp;<br/>static&nbsp;void&nbsp;Prepare()<br/>{<br/>string[]&nbsp;badwords&nbsp;=&nbsp;//&nbsp;read&nbsp;from&nbsp;file<br/>foreach&nbsp;(string&nbsp;word&nbsp;in&nbsp;badwords)<br/>{<br/>if&nbsp;(!dic.ContainsKey(word))<br/>{<br/>dic.Add(word,&nbsp;null);&nbsp;<br/>maxlength&nbsp;=&nbsp;Math.Max(maxlength,&nbsp;word.Length);&nbsp;<br/>int&nbsp;value&nbsp;=&nbsp;word[0];&nbsp;<br/>fastcheck[word[0]]&nbsp;=&nbsp;true;&nbsp;<br/>}<br/>}<br/>}<br/><br/>　　使用的时候<br/>int&nbsp;index&nbsp;=&nbsp;0;&nbsp;<br/>while&nbsp;(index&nbsp;＜&nbsp;target.Length)<br/>{<br/>if&nbsp;(!fastcheck[target[index]])<br/>{<br/>while&nbsp;(index&nbsp;＜target.Length&nbsp;-&nbsp;1&nbsp;&amp;&amp;&nbsp;!fastcheck[target[++index]])&nbsp;;&nbsp;<br/>}<br/>for&nbsp;(int&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;＜&nbsp;Math.Min(maxlength,&nbsp;target.Length&nbsp;-&nbsp;index);&nbsp;j++)<br/>{<br/>string&nbsp;sub&nbsp;=&nbsp;target.Substring(index,&nbsp;j);&nbsp;<br/>if&nbsp;(dic.ContainsKey(sub))<br/>{<br/>sb.Replace(sub,&nbsp;&#34;***&#34;,&nbsp;index,&nbsp;j);&nbsp;<br/>index&nbsp;+=&nbsp;j;&nbsp;<br/>break;&nbsp;<br/>}<br/>}<br/>index++;&nbsp;<br/>}&nbsp;]]></description>
		</item>
		
			<item>
			<link>http://www.loverer.com/default.asp?id=436</link>
			<title><![CDATA[sql2000下用的正则表达式]]></title>
			<author>ctv0071#hotmail.com(ym110)</author>
			<category><![CDATA[其他杂记]]></category>
			<pubDate>Sat,05 Jul 2008 13:47:37 +0800</pubDate>
			<guid>http://www.loverer.com/default.asp?id=436</guid>	
		<description><![CDATA[Cr&#101;ate&nbsp;function&nbsp;dbo.regexReplace<br/><br/>(<br/><br/>@source&nbsp;ntext,&nbsp;&nbsp;&nbsp;&nbsp;--原字符串<br/><br/>@regexp&nbsp;varchar(1000),&nbsp;&nbsp;&nbsp;&nbsp;--正则表达式<br/><br/>@replace&nbsp;varchar(1000),&nbsp;&nbsp;&nbsp;--替换值<br/><br/>@globalReplace&nbsp;bit&nbsp;=&nbsp;0,&nbsp;&nbsp;&nbsp;--是否是全局替换<br/><br/>@ignoreCase&nbsp;bit&nbsp;=&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--是否忽略大小写<br/><br/>)<br/><br/>returnS&nbsp;varchar(1000)&nbsp;AS<br/><br/>begin<br/><br/>declare&nbsp;@hr&nbsp;integer<br/><br/>declare&nbsp;@objRegExp&nbsp;integer<br/><br/>declare&nbsp;@result&nbsp;varchar(5000)<br/><br/><br/><br/>exec&nbsp;@hr&nbsp;=&nbsp;sp_OACr&#101;ate&nbsp;&#39;VBScript.RegExp&#39;,&nbsp;@objRegExp&nbsp;OUTPUT<br/><br/>IF&nbsp;@hr&nbsp;&lt;&gt;&nbsp;0&nbsp;begin<br/><br/>exec&nbsp;@hr&nbsp;=&nbsp;sp_OADestroy&nbsp;@objRegExp<br/><br/>return&nbsp;null<br/><br/>end<br/><br/>exec&nbsp;@hr&nbsp;=&nbsp;sp_OASetProperty&nbsp;@objRegExp,&nbsp;&#39;Pattern&#39;,&nbsp;@regexp<br/><br/>IF&nbsp;@hr&nbsp;&lt;&gt;&nbsp;0&nbsp;begin<br/><br/>exec&nbsp;@hr&nbsp;=&nbsp;sp_OADestroy&nbsp;@objRegExp<br/><br/>return&nbsp;null<br/><br/>end<br/><br/>exec&nbsp;@hr&nbsp;=&nbsp;sp_OASetProperty&nbsp;@objRegExp,&nbsp;&#39;Global&#39;,&nbsp;@globalReplace<br/><br/>IF&nbsp;@hr&nbsp;&lt;&gt;&nbsp;0&nbsp;begin<br/><br/>exec&nbsp;@hr&nbsp;=&nbsp;sp_OADestroy&nbsp;@objRegExp<br/><br/>return&nbsp;null<br/><br/>end<br/><br/>exec&nbsp;@hr&nbsp;=&nbsp;sp_OASetProperty&nbsp;@objRegExp,&nbsp;&#39;IgnoreCase&#39;,&nbsp;@ignoreCase<br/><br/>IF&nbsp;@hr&nbsp;&lt;&gt;&nbsp;0&nbsp;begin<br/><br/>exec&nbsp;@hr&nbsp;=&nbsp;sp_OADestroy&nbsp;@objRegExp<br/><br/>return&nbsp;null<br/><br/>end&nbsp;<br/><br/>exec&nbsp;@hr&nbsp;=&nbsp;sp_OAMethod&nbsp;@objRegExp,&nbsp;&#39;Replace&#39;,&nbsp;@result&nbsp;OUTPUT,&nbsp;@source,&nbsp;@replace<br/><br/>IF&nbsp;@hr&nbsp;&lt;&gt;&nbsp;0&nbsp;begin<br/><br/>exec&nbsp;@hr&nbsp;=&nbsp;sp_OADestroy&nbsp;@objRegExp<br/><br/>return&nbsp;null<br/><br/>end<br/><br/>exec&nbsp;@hr&nbsp;=&nbsp;sp_OADestroy&nbsp;@objRegExp<br/><br/>IF&nbsp;@hr&nbsp;&lt;&gt;&nbsp;0&nbsp;begin<br/><br/>return&nbsp;null<br/><br/>end<br/><br/><br/><br/>return&nbsp;@result<br/><br/>end<br/><br/>调用：sel&#101;ct&nbsp;dbo.regexReplace(&#39;sdfasfjksdjfa12k232132134324lsdjlfka&#39;,&#39;[a-z]&#39;,&#39;&#39;,1,1)<br/><br/>替换字符串里的所有字母&nbsp;<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.loverer.com/default.asp?id=435</link>
			<title><![CDATA[SQL删除重复数据（总结）]]></title>
			<author>ctv0071#hotmail.com(ym110)</author>
			<category><![CDATA[其他杂记]]></category>
			<pubDate>Fri,20 Jun 2008 17:05:18 +0800</pubDate>
			<guid>http://www.loverer.com/default.asp?id=435</guid>	
		<description><![CDATA[一、具有主键的情况&nbsp;<br/>&nbsp;<br/>I.具有唯一性的字段id(为唯一主键)&nbsp;<br/>&nbsp;<br/>del&#101;te&nbsp;用户表&nbsp;&nbsp;&nbsp;&nbsp;<br/>wh&#101;re&nbsp;id&nbsp;not&nbsp;in&nbsp;&nbsp;&nbsp;&nbsp;<br/>(&nbsp;<br/>sel&#101;ct&nbsp;max(id)&nbsp;from&nbsp;用户表&nbsp;group&nbsp;by&nbsp;col1,col2,col3...&nbsp;<br/>)&nbsp;<br/>group&nbsp;by&nbsp;子句后跟的字段就是你用来判断重复的条件，如只有col1，&nbsp;<br/>那么只要col1字段内容相同即表示记录相同。&nbsp;<br/>&nbsp;<br/>II.具有联合主键&nbsp;<br/>&nbsp;<br/>假设col1+&#39;,&#39;+col2+&#39;,&#39;...col5&nbsp;为联合主键<br/>&nbsp;<br/>（找出相同记录）<br/>sel&#101;ct&nbsp;*&nbsp;from&nbsp;&nbsp;&nbsp;&nbsp;用户表&nbsp;wh&#101;re&nbsp;col1+&#39;,&#39;+col2+&#39;,&#39;...col5&nbsp;in&nbsp;<br/>(&nbsp;<br/>&nbsp;sel&#101;ct&nbsp;max(col1+&#39;,&#39;+col2+&#39;,&#39;...col5)&nbsp;from&nbsp;用户表&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;group&nbsp;by&nbsp;col1,col2,col3,col4<br/>&nbsp;having&nbsp;count(*)&gt;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>)&nbsp;<br/>group&nbsp;by&nbsp;子句后跟的字段就是你用来判断重复的条件，&nbsp;<br/>如只有col1，那么只要col1字段内容相同即表示记录相同。&nbsp;<br/>&nbsp;<br/>或者：<br/>（找出相同记录）<br/>sel&#101;ct&nbsp;*&nbsp;from&nbsp;用户表&nbsp;&nbsp;&nbsp;&nbsp;wh&#101;re&nbsp;exists&nbsp;(sel&#101;ct&nbsp;1&nbsp;from&nbsp;用户表&nbsp;x&nbsp;wh&#101;re&nbsp;用户表.col1&nbsp;=&nbsp;x.col1&nbsp;and&nbsp;&nbsp;&nbsp;&nbsp;<br/>用户表.col2=&nbsp;x.col2&nbsp;group&nbsp;by&nbsp;x.col1,x.col2&nbsp;having&nbsp;count(*)&nbsp;&gt;1)&nbsp;<br/>&nbsp;<br/>III:判断所有的字段&nbsp;<br/>&nbsp;<br/>&nbsp;&nbsp;&nbsp;sel&#101;ct&nbsp;*&nbsp;into&nbsp;#aa&nbsp;from&nbsp;用户表&nbsp;group&nbsp;by&nbsp;id1,id2,....&nbsp;<br/>&nbsp;&nbsp;&nbsp;del&#101;te&nbsp;用户表&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;ins&#101;rt&nbsp;into&nbsp;用户表&nbsp;sel&#101;ct&nbsp;*&nbsp;from&nbsp;#aa&nbsp;<br/>&nbsp;<br/>二、没有主键的情况&nbsp;<br/>&nbsp;<br/>I.用临时表实现&nbsp;<br/>&nbsp;<br/>sel&#101;ct&nbsp;identity(int,1,1)&nbsp;as&nbsp;id,*&nbsp;into&nbsp;#temp&nbsp;from&nbsp;用户表&nbsp;<br/>del&#101;te&nbsp;#temp&nbsp;&nbsp;&nbsp;&nbsp;<br/>wh&#101;re&nbsp;id&nbsp;not&nbsp;in&nbsp;&nbsp;&nbsp;<br/>(&nbsp;<br/>&nbsp;&nbsp;&nbsp;sel&#101;ct&nbsp;max(id)&nbsp;from&nbsp;#&nbsp;group&nbsp;by&nbsp;col1,col2,col3...&nbsp;<br/>)&nbsp;<br/>del&#101;te&nbsp;用户表&nbsp;ta&nbsp;<br/>inset&nbsp;into&nbsp;ta(...)&nbsp;sel&#101;ct&nbsp;.....&nbsp;from&nbsp;#temp&nbsp;<br/>&nbsp;<br/>II.用改变表结构（加一个唯一字段）来实现<br/>&nbsp;<br/>alt&#101;r&nbsp;用户表&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;newfield&nbsp;int&nbsp;identity(1,1)&nbsp;<br/>del&#101;te&nbsp;用户表&nbsp;<br/>wh&#101;re&nbsp;newfield&nbsp;not&nbsp;in&nbsp;<br/>(&nbsp;<br/>sel&#101;ct&nbsp;min(newfield)&nbsp;from&nbsp;用户表&nbsp;group&nbsp;by&nbsp;除newfield外的所有字段&nbsp;<br/>)&nbsp;<br/>alt&#101;r&nbsp;用户表&nbsp;dro&#112;&nbsp;column&nbsp;newfield<br/>===================================================<br/>2008-03-27&nbsp;11:57如果该表需要删除重复的记录（重复记录保留1条），可以按以下方法删除&nbsp;<br/><br/>sel&#101;ct&nbsp;distinct&nbsp;*&nbsp;into&nbsp;#Tmp&nbsp;from&nbsp;tableName&nbsp;<br/>dro&#112;&nbsp;table&nbsp;tableName&nbsp;<br/>sel&#101;ct&nbsp;*&nbsp;into&nbsp;tableName&nbsp;from&nbsp;#Tmp&nbsp;<br/>dro&#112;&nbsp;table&nbsp;#Tmp&nbsp;<br/><br/>另一种方法是一个字段重复,ID不重复<br/><br/>del&#101;te&nbsp;表&nbsp;wh&#101;re&nbsp;id&nbsp;not&nbsp;in(<br/>Sel&#101;ct&nbsp;MAX(id)&nbsp;AS&nbsp;id&nbsp;FROM&nbsp;表&nbsp;GROUP&nbsp;BY&nbsp;rows)&nbsp;---&nbsp;删除重复行<br/><br/>sel&#101;ct&nbsp;*&nbsp;from&nbsp;表&nbsp;wh&#101;re&nbsp;id&nbsp;in(<br/>Sel&#101;ct&nbsp;MAX(id)&nbsp;AS&nbsp;id&nbsp;FROM&nbsp;表&nbsp;GROUP&nbsp;BY&nbsp;rows)&nbsp;--重复行只查询一条<br/>&nbsp;<br/>]]></description>
		</item>
		
</channel>
</rss>