it之路。

  2011年4月19日

在管理端的定时遍历检查掉线人员线程 和 客户端的心跳包验证接收都需要对在线人员列表作出修改,因此这两个线程在修改在线人员列表时用到了lock关键字
需要注意的两点:
1,在检查在线人员状态的无限循环中慎用break,continue等关键字,以防本次循环未暂停直接进入下一次循环而出现程序短时间假死的情况。
2,检查在lock代码块内部是否写了暂停线程的代码,如果是,其余的线程代码将等待而会导致不可预料的情况发生。

posted @ 2011-04-19 16:41 愚昧的小猪 阅读(39) 评论(0) 编辑
  2011年4月12日

static void Main(string[] args)
        {
            CreateMessageWithAttachment("smtp.163.com");

            Console.WriteLine("发送成功");
            Console.ReadLine();
        }

        public static void CreateMessageWithAttachment(string server)
        {           
            // 指定要被发送的附件,本例中的附件为同级目录下的data.xls文件
            string file = "data.xls";
            // 1, Create a message and set up the recipients.创建一个邮件,设置发送人,收信人以及主题,正文
            MailMessage message = new MailMessage(
               "cykevin@163.com",
               "735356115@qq.com",
               "hello",
               "fuck");

            // 2,Create  the file attachment for this e-mail message.创建邮件附件
            Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
            // 3,给附件添加时间戳 Add time stamp information for the file.
            ContentDisposition disposition = data.ContentDisposition;// 添加附件标头
            disposition.CreationDate = System.IO.File.GetCreationTime(file);
            disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
            disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
            // 4,将附件添加到邮件Add the file attachment to this e-mail message.
            message.Attachments.Add(data);// 添加附件
            // 5,创建发送端,配置发送端Send the message.
            SmtpClient client = new SmtpClient(server);
            client.UseDefaultCredentials = false;
            // Add credentials if the SMTP server requires them.
            client.Credentials = new System.Net.NetworkCredential("用户名", "密码");
            // 6,发送
            client.Send(message);// 发送
            // Display the values in the ContentDisposition for the attachment.
            ContentDisposition cd = data.ContentDisposition;
            Console.WriteLine("Content disposition");
            Console.WriteLine(cd.ToString());
            Console.WriteLine("File {0}", cd.FileName);
            Console.WriteLine("Size {0}", cd.Size);
            Console.WriteLine("Creation {0}", cd.CreationDate);
            Console.WriteLine("Modification {0}", cd.ModificationDate);
            Console.WriteLine("Read {0}", cd.ReadDate);
            Console.WriteLine("Inline {0}", cd.Inline);
            Console.WriteLine("Parameters: {0}", cd.Parameters.Count);
            foreach (DictionaryEntry d in cd.Parameters)
            {
                Console.WriteLine("{0} = {1}", d.Key, d.Value);
            }
            // 7,销毁附件
            data.Dispose();
        }

posted @ 2011-04-12 13:12 愚昧的小猪 阅读(28) 评论(0) 编辑
  2011年3月17日

现象:

在IE地址栏中输入http://localhost/页面上会显示service unavailable。

解决办法:

在事件查看器中找到具体错误。

例如:

应用程序-特定权限设置未将COM 服务器应用程序(CLSID 为  
{A9E69610-B80D-11D0-B9B9-00A0C922E750}  
)的 本地 激活 权限授予用户 IBM-D882681D063\IWAM_IBM-D882681D063 SID (S-1-5-21-1304240173-3011969147-3728014682-1013)。可以使用组件服务管理工具修改此安全权限。

此时照描述在组件管理工具中,找到iis admin服务,右键属性,安全选项卡,在“启动和激活权限”中编辑自定义,添加描述中所述的账号,赋予本地启动和本地激活的权限,再重启iisadmin服务即可。

 

现象:

在IE地址栏中输入任意的动态网页,页面上会显示服务程序不可用,请查看服务器上的错误日志了解详细信息。

详细错误是:由于无法创建应用程序域,因此未能执行请求。错误: 0x80004005 未指定的错误。

解决办法:将WEB应用程序的应用程序池的运行帐户改为本地系统即可。

posted @ 2011-03-17 15:44 愚昧的小猪 阅读(117) 评论(0) 编辑
  2011年3月9日

先添加控件到界面,再指定selectedindex属性即可。

posted @ 2011-03-09 17:33 愚昧的小猪 阅读(31) 评论(0) 编辑
  2010年9月18日

如何在asp.net页面实现回调:

1,将整个页面或某个自定义控件实现ICallbackEventHandler接口

2,在服务器端编码以自动生成客户端回调函数

3,在客户端添加脚本用以调用步骤2生成的回调函数并执行服务器的回调结果

 

首先,网页当然是无状态的,当服务器返回给客户端一个页面的时候,他们之间就已经没有任何关系了。客户端要想再回调服务器的方法,只能是ajax发送请求。

 

来看看回调是如何封装这个发送请求的过程的。

1,执行上面的第二个步骤需要调用clientscriptmanager实例的GetCallbackEventReference方法。当调用这个方法时需要传递一些参数:

1,处理回调的控件

2,客户端脚本传递给服务器的参数

3,接收成功的服务器回调结果的客户端脚本函数

4,启动回调之前的预处理方法。。。

当执行这个方法后,服务器就会为我们生成一个脚本库放在本页面的同级目录下,并且自动在页面添加对该脚本库的引用。而发送ajax请求的js脚本就被包含在这些库中,名字可能叫做WebForm_DoCallback。发送ajax请求的必备步骤就在这个函数中,瞧,微软都为我们写好了。

仔细看看,你可以发现,微软做了浏览器对ajax兼容性处理,如果你的浏览器不支持xmlhttprequest对象,那么,该脚本库将会采用隐藏帧的方式来实现局步的刷新。而且隐藏帧在被方法执行完之后会被移除。

2,当触发第3步手动添加的客户端脚本时,会执行webform_docallback方法。在该方法内部将请求发送到当前页面后,页面会执行RaiseCallbackEvent方法。至此处,核心的回调才被服务器处理。这个方法执行完后,紧跟着是GetCallbackResult方法,将结果返回给客户端脚本处理

3,有几个地方要注意,当我们服务器端生成发送ajax请求的函数时,我们必须指定我们要在客户端脚本处理请求结果的js方法。就像我们手写ajax请求那样,必须指定onreadystatechange,当返回readystate变为4是做一些正确的处理。而在这里ms都为我们做好了这一些,我们要做的就是将这些函数名作为参数指定好。名字一定要相同。

浅析结束。

posted @ 2010-09-18 23:13 愚昧的小猪 阅读(43) 评论(0)  编辑
  2010年7月21日
摘要: 创建一个简单的入门级示例 1,新建一个空白的解决方案 2,添加一个类库项目,用来定义WCF的协定,因为要用到ServiceContract来声明协定,因此须手动添加对system.servicemodel的引用;如果要定义数据协定,还需要手动添加对system.runtime.serilization的引用. 3,添加一个类库项目,用来实现上一步定义的协定,引用之 4,添加一个控制台项目,...阅读全文
posted @ 2010-07-21 14:53 愚昧的小猪 阅读(16) 评论(0)  编辑
  2010年7月18日
摘要: 从官网上下载安装包后安装,发现这样的错误,一看服务,里面确实没有一个名为apache2.2的服务,网上搜一下,搜出来的解决方案是用命令行到bin目录下执行 "apache –k install” 执行报错,因为根本没有apache这个文件。   最后在一个国外的网站上看到这样的回复: "httpd.exe –k install” "httpd.e...阅读全文
posted @ 2010-07-18 11:12 愚昧的小猪 阅读(847) 评论(0) 编辑
  2010年6月30日
摘要: QmPmONflhTBjWhFQiQxakMwpnNwdmnMrxJJRqMukwhXkEf mi2KHfSXLb03P6g<sr0RW>HK2KTMSEiArlvWz107SDinY8 RoPtWmQqnRPNPnrqOOvsqqRroRRQQnNpRssXWsWnUQwWRV nwsNWUtxostUUnoqrovnrqprsoUUnoqrovnrqprsoUU15C 2jNqH8...阅读全文
posted @ 2010-06-30 08:45 愚昧的小猪 阅读(7) 评论(0) 编辑
  2010年6月11日
摘要: 首先看清楚一点 winform下该控件的名称叫做:checkedListbox webform下叫做CheckBoxList 不知道这样起名的用意何在,这个别管了,看看用法吧。 web下很简单,直接设置DataSource,指定Displaymember,valuemember就OK了。 winform下,其实也简单,设置DataSource,指定Displaymember,valuem...阅读全文
posted @ 2010-06-11 12:25 愚昧的小猪 阅读(566) 评论(0) 编辑
  2010年5月9日
摘要: 创建线程: 创建一个Worker对象和一个实例; 线程对象被配置为:通过将Worker.DoWork的引用传递给Thread构造函数,来将该方法用作入口点。代码如下: 此时,尽管辅助线程对象存在并且已经配置,但未创建实验的辅助线程。只有当调用start方法后,才会创建实际的辅助线程。代码如下: 为了保证辅助线程执行之前不会被主线程终止,主线程将一直循环。代码如下: 为了保证辅助线程能执行若干次...阅读全文
posted @ 2010-05-09 11:20 愚昧的小猪 阅读(152) 评论(0)  编辑