2007年6月12日
当BizTalk使用多服务器部署方案时,如果要更新BizTalk Application引用到的程序集,就必须将程序集同时更新到多台服务器的GAC中。如果每次更新以后,都需要手工在多台服务器更新,实在太麻烦。为了偷懒,就想到用WMI在远程服务器上创建进程来更新GAC中的程序集:)用WMI在远程服务器上创建进程的命令如下:WMIC /node:server01 /user:mydomain\myusername /password:pass@word1 process call create "C:\gacutil /u myBizAssembly"WMIC /node:server01 /user:mydomain\myusername /password:pass@word1 process call create "C:\gacutil /i C:\Deploy\myBizAssembly.dll"接下来要做的就是将程序集,从Build机器copy到deploy服务器上,然后调用gacutil卸载程序集、重新安装程序集和重启BizTalk Host Instances了。把所有的命令都写到一个批处理文件就可以:
不过这种方式,只适合不影响到BizTalk的Bindings的时候,比如新的程序集相对原来的程序集,多了一个ReceivePort,这种方式没办法更新BizTalk的Bindings。这种方式,也适用于daily build後将程序集部署到测试服务器上,只需要加一段自定义任务就可以。
posted @ 2007-06-12 14:57 Kevin Li 阅读(211) | 评论 (0) | 编辑
2007年5月26日
在测试WCF 的WS-AT协议的时候发现,虽然wsHttpBinding只支持WS-AtomicTransaction,但是当我没有配置MSDTC支持WS-AT协议,或者没有启用WS-AT协议,事务还是能够正常的Commit和Rollback。刚开始不知道是什么原因,后来查了一下微软的相关文档,发现使用wsHttpBinding支持事务时,出于效率的考虑,WCF会首先使用Oletx事务,而不是完全的ws-at协议。只有在oletx协议不可用的情况,比如135端口没开、或者和java web service互操作的情况下,wcf才会完全使用ws-at协议。这固然是好,但是有时候我们并不希望这样(比如测试的时候),这时候我们可以修改注册表,禁止事务自动升级为oletx事务。具体是在注册表:HKLM\SOFTWARE\Microsoft\WSAT\3.0下增加一个名为“OleTxUpgradeEnabled”的DWord值,并且设置值为0(1为启用自动升级)
posted @ 2007-05-26 23:58 Kevin Li 阅读(1514) | 评论 (1) | 编辑
posted @ 2007-05-26 23:39 Kevin Li 阅读(2206) | 评论 (1) | 编辑
posted @ 2007-05-26 23:08 Kevin Li 阅读(3109) | 评论 (3) | 编辑
2007年2月9日
posted @ 2007-02-09 10:21 Kevin Li 阅读(1977) | 评论 (9) | 编辑
2006年11月10日
posted @ 2006-11-10 00:56 Kevin Li 阅读(2472) | 评论 (0) | 编辑
2005年12月10日
posted @ 2005-12-10 21:25 Kevin Li 阅读(4141) | 评论 (14) | 编辑
2005年5月30日
posted @ 2005-05-30 22:26 Kevin Li 阅读(2553) | 评论 (5) | 编辑
2005年5月28日
在.net 1.1中我们无法对基础类型,如int、DateTime、enum类型等赋予null的值,但这在实际应用中往往会带来很多麻烦,比如有下面这个函数:class OrderDAC{ public ArrayList GetOrders(OrderStatus status){ }}public enum OrderStatus{ Initial, Canceled, Delivered}如果我们希望该函数GetOrders中当输入的为status == null 的时候获取所有OrderStatus的订单,而如果status不等于 null 时获取指定状态下的订单,在.net 1.1中根本无法实现,因为我们无法将 status 设为 null,因为它是基础类型。又考虑另外一种情况,如:OrderInfo order = new OrderInfo();order.DeliveryDate = reader.IsDbNull("DeliveryDate") == true? null : (DateTime) reader["DeliveryDate"];上面的代码实际上无法编译通过,因为DateTime不允许付空,取而代之的是:if( reader.IsDbNull("DeliveryDate") == false){ order.DeliveryDate = (DateTime) reader["DeliveryDate"];}当我们要判断 order.DeliveryDate 是否有赋值,也不能采用 if( order.DeliveryDate == null ),这时往往需要给类似的字段赋一个默认值,比如 DateTime.MinValue,但这处理起来也是挺麻烦的。幸运的是,在.net 2.0中,提供了 Nullable的范型,通过它,我们可以为基础类型如int等赋予null的值,具体如下:class OrderDAC{ public List<OrderInfo> GetOrders(Nullable<OrderStatus> status){ }}上面用到了两个范型,一个是List<OrderInfo>,一个是Nullable<OrderStatus>,有了这个,我们就可以调用OrderDAC ord = new OrderDAC();List<OrderInfo> orders = ord.GetOrders(null);这样我们就可以为 OrderStatus status 赋予null的值,是不是方便了很多呢?同样,我们也可以定义class OrderInfo{ public Nullable<DateTime> DeliveryDate;}这样,我们就可以为OrderInfo.DeliveryDate 赋予 null,并且可以判断 OrderInfo.DeliveryDate == null ,又方便了很多。其实象这样的例子还有很多:).net 2.0 确实为我们提供了很多便利,期待正式版!!
posted @ 2005-05-28 22:38 Kevin Li 阅读(1522) | 评论 (4) | 编辑
2005年4月20日
posted @ 2005-04-20 14:11 Kevin Li 阅读(2118) | 评论 (0) | 编辑
Powered by: 博客园 Copyright © Kevin Li