博文
1. 什么是webservice(2008-08-30 22:56:00)
摘要:1. 什么是webservice从表面上看,Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。对Web service 更精确的解释: Web services是建立可互操作的分布式应用程序的新平台。作为一个Windows程序员,你可能已经用COM或DCOM建立过基于组件的分布式应用程序。COM是一个非常好的组件技术,但是我们也很容易举出COM并不能满足要求的情况。Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。不管你的Web service是用什么工具,什么语言写出来的,只要你用SOAP协议通过HTTP来调用它,总体结构都应如下图所示。通常,你用你自己喜欢的语言(如VB 6或者VB.NET)来构建你的Web service,然后用SOAP Toolkit或者.NET的内建支持来把它暴露给Web客户。于是,任何语言,任何平台上的客户都可以阅读其WSDL文档,以调用这个Web service。客户根据WSDL描述文档,会生成一个SOAP请求消息。Web service都是放在Web服务器 (如IIS) 后面的,客户生成的SOAP请求会被嵌入在一个HTTP POST请求中,发送到Web服务器来。Web服务器再把这些请求转发给Web service请求处理器。对VB 6程序来说,Web service请求处理器是一个与SOAP Toolkit组件协同工作的ASP页面或ISAPI extension。而对VB.NET程序来说,Web service请求处理器则是一个.NET Framework自带的ISAPI extension。请求处理器的作用在于,解析收到的SOAP请求,调用Web service,然后再生成相应的SOAP应答。Web服务器得到SOAP应答后,会再通过HTTP应答的方式把它送回到客户端。......
C# 代码规范【4】(2008-08-30 10:23:00)
摘要:8.2.3 枚举命名指导方针
· 用Pascal情况命名枚举值名字和类型名字
· 枚举类型和枚举值不要前缀
· 对于枚举用单一名字
· 对于位领域用复数名字
8.2.4 只读和常量命名
· 用名词,名词短语或名词的缩写命名静态领域
· 使用Pascal 情况(参考8.1.1)
8.2.5 参数/非常量领域命名
· 一定要用描述性名字,应该能够足够表现变量的意义和它的类型。但一个好的名字应该基于参数的意义。
· 使用Camel情况(参考8.1.2)
8.2.6 变量命名
· 计数变量当用在琐碎的计数循环式更适宜叫i, j, k, l, m, n。(参考10.2例如对全局计数的更智能命名等等)—
· 使用Camel情况(参考8.1.2)
8.2.7 方法命名
· 用动词或动词短语命名方法。
· 使用Pascal(参考8.1.2)
8.2.8 属性命名
· &......
C# 代码规范【3】(2008-08-30 10:21:00)
摘要:}
一个空while语句应该是以下格式: while (condition) ;
一个do-while语句应该是如下格式: do {...} while (condition);
6.6 Switch 语句
一个switch语句应该如下格式: switch (condition) {case A:...break;case B:...break;default:...break;}
6.7 Try-catch 语句
一个try-catch statement语句应该遵循以下格式: try {...} catch (Exception) {}ortry {...} catch (Exception e) {...}ortry {...} catch (Exception e) {...} finally {...}
7. 空白
7.1 空行
空行提高可读性。它们分开那些逻辑上自身相关联的代码块。两行空格行应该用于以下之间:
· 一个源文件的逻辑段。
· 类和接口定义(每个文件只定义一个类或接口以避免这种情况)。
一个空格行应该总是被用于以下之间:
· 方法
· 属性
· 一个方法中的局部变量和它的第一条语句
· 一个方法中的逻辑段为了提高可读性。注意空白行必须被缩进因为它们包括一条语句这使得插入这些行更容易。
7.2 内部空格
在一个逗号或一个分号之后应该由一个空格,例如: TestMethod(a, b, c); 不要用: TestMethod(a,b,c)或TestMethod( a, b, c );
单个空格包围操作符(除了像加的一元操作符和逻辑非),例......
C# 代码规范【2】(2008-08-30 10:20:00)
摘要:5. 声明
5.1 每行的声明数
推荐每行只有一个声明,因为它可以方便注释。int level; // indentation levelint size; // size of table
当声明变量时,不要把多个变量或不同类型的变量放在同一行,例如: int a, b; //What is 'a'? What does 'b' stand for?
上面的例子也显示了变量名不明显的缺陷。当命名变量时要清晰。5.2 初始化
局部变量一旦被声明就要初始化。例如: string name = myObject.Name;或int val = time.Hours;
注意:如果你初始化一个dialog,设计使用using语句: using (OpenFileDialog openFileDialog = new OpenFileDialog()) {...}
5.3 类和接口声明
当编写C#类和接口时,应遵循以下格式化规则:
· 在方法名和圆括号“(”开始它的参数列表之间不要使用空格。
· 在声明语句的下一行以大括号"{"标志开始。
· 以"}"结束,通过它自身的缩进与相应的开始标志匹配。
例如: Class MySample : MyClass, IMyInterface{ int myInt; public MySample(int myInt) { this.myInt = myInt ; ......
C#代码规范【1】(2008-08-30 10:19:00)
摘要:1. 引言
本文是一套面向C# programmer 和C# developer 进行开发所应遵循的开发规范。
按照此规范来开发C#程序可带来以下益处:
· 代码的编写保持一致性,
· 提高代码的可读性和可维护性,
· 在团队开发一个项目的情况下,程序员之间可代码共享
· 易于代码的回顾,
本规范是初版,只适用于一般情况的通用规范,并不能覆盖所有的情况。
2. 文件组织
2.1 C# 源文件
类名或文件名要简短,不要超过2000LOC,将代码分割开,使结构清晰。将每个类放在一个单独的文件中,使用类名来命名文件名(当然扩展名是.cs)。这种约定会使大家工作更简单。
2.2 目录设计
为每一个命名空间创建一个目录。(用MyProject/TestSuite/TestTier作为MyProject.TestSuite.TestTier的路径,而不用带点的命名空间名做路径)这样可以更容易地将命名空间映射到目录层次划分。
3. 缩进
3.1 换行
当一个表达式超过一行时,根据这些通用原则进行处理:
· 在逗号后换行。
· 在操作符后换行。
· 在高层换行而不要在低层处换行。
· 折行后对齐上一行语句同一层的表达式起始位置。
方法调用换行示例: longMethodCall(expr1, expr2, &nbs......
C# 文件的输入输出程序与控制[3](2008-08-29 13:26:00)
摘要:tvDir.SelectedNode.Nodes.Add(
new TreeNode(formDir.txtFileName.Text,3,4));
}
}
// <summary>
// 删除当前选择的目录及其所有子目录
// </summary>
private void DeleteDirectory()
{
if( MessageBox.Show(this,
"确定删除所选择目录" + tvDir.SelectedNode.FullPath + " 吗?",
"删除目录",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Exclamation )
......
C# 文件的输入输出程序与控制[2](2008-08-29 13:25:00)
摘要:// 把子目录和文件添加到文件列表视图中
lvFiles.BeginUpdate();
lvFiles.Clear(); // 首先清除列表视图中的所有内容
// 添加4个列表头
lvFiles.Columns.AddRange(
new System.Windows.Forms.ColumnHeader[] {
chName,
chSize,
chType,
&nb......
C# 文件的输入输出程序与控制[1](2008-08-29 13:24:00)
摘要:// <summary>
// 获取所有逻辑盘并列出硬盘所有目录
// </summary>
private void ListDrives()
{
TreeNode tn;
// 获取系统中的所有逻辑盘
string[] drives = Directory.GetLogicalDrives();
// 向树视图中添加节点
tvDir.BeginUpdate();
for(int i=0;i<drives.Length;i++)
{
// 根......
C#关闭计算机 --危险啊--请慎重(2008-09-03 07:10:00)
摘要:using System;using System.Runtime.InteropServices; class shoutdown{ [StructLayout(LayoutKind.Sequential, Pack=1)] internal struct TokPriv1Luid { public int Count; public long Luid; public int Attr; }
[DllImport("kernel32.dll", ExactSpelling=true)] internal static extern IntPtr GetCurrentProcess();
[DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true)] internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
[DllImport("advapi32.dll", SetLastError=true)] internal static extern bool LookupPrivilegeValue(string host, string name, ref long pluid);
[DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true)] internal static extern bool AdjustTokenPrivileges(IntPtr htok, bool disall,ref TokPriv1Luid......
几个字符提取处理分割等函数(2008-08-28 12:09:00)
摘要:--提取数字IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULLDROP FUNCTION DBO.GET_NUMBER2GOCREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))RETURNS VARCHAR(100)ASBEGINWHILE PATINDEX('%[^0-9]%',@S) > 0BEGINset @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')ENDRETURN @SENDGO--测试PRINT DBO.GET_NUMBER('呵呵ABC123ABC')GO--123----------------------------------------------------------------------提取英文IF OBJECT_ID('DBO.GET_STR') IS NOT NULLDROP FUNCTION DBO.GET_STRGOCREATE FUNCTION DBO.GET_STR(@S VARCHAR(100))RETURNS VARCHAR(100)ASBEGINWHILE PATINDEX('%[^a-z]%',@S) > 0BEGINset @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')ENDRETURN @SENDGO--测试PRINT DBO.GET_STR('呵呵ABC123ABC')GO----------------------------------------------------------------------提取中文IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULLDROP FUNCTION DBO.CHINA_STRGOCREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))RETURNS VARCHAR(100)ASBEGINWHILE PATINDEX('%[^吖-座]%',@S) > 0SET @S = STUFF(@S,PATINDEX('%[^吖-座]%',@S),1,N'')RETURN @SENDGOPRINT DBO.CHINA_STR('呵呵ABC12......
