博文
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) {}
or
try {
...
} catch (Exception e) {
...
}
or
try {
...
} catch (Exception e) {
...
} finally {
...
}
7. 空白
7.1 空行
空行提高可读性。......
C# 代码规范【2】(2008-08-30 10:20:00)
摘要:5. 声明
5.1 每行的声明数
推荐每行只有一个声明,因为它可以方便注释。
int level; // indentation level
int 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#类和接口时,应遵循以下格式化规则:
· 在方法名和圆括号“(”开始它的参数列表之间不要使用空格。
· 在声明语句的下一行以......
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,
&n......
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 AdjustT......
几个字符提取处理分割等函数(2008-08-28 12:09:00)
摘要:--提取数字
IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER2
GO
CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBO.GET_NUMBER('呵呵ABC123ABC')
GO
--123
--------------------------------------------------------------------
--提取英文
IF OBJECT_ID('DBO.GET_STR') IS NOT NULL
DROP FUNCTION DBO.GET_STR
GO
CREATE FUNCTION DBO.GET_STR(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^a-z]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
END
RETURN @S
END
GO
--测试
PRINT DBO.GET_STR('呵呵ABC123ABC')
GO
--------------------------------------------------------------------
--提取中文
IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
DROP FUNCTION DBO.CHINA_STR
GO
CREATE FUNCTION DBO.CHINA_ST......