hBifTs

山自高兮水自深!當塵霧消散,唯事實留傳.荣辱不惊, 看庭前花开花落; 去留随意, 望天上云展云舒.
posts - 82, comments - 442, trackbacks - 38, articles - 27

导航

公告

在Biztalk中使用Log功能:)

Posted on 2005-04-13 21:24 hbiftsaa 阅读(...) 评论(...) 编辑 收藏
这几天,因为一些其它的原因,要使用BizTalk完成一个工作流的东西...刚看的时候,好晕啊.基本上完全不懂.
不过,幸好有M$的关于BizTalk的一些教学光盘.总算知道BizTalk是怎么一回事了:)

说实话,BizTalk真是一个好东西,可以很方便的把很复杂的工作流实现.而且实现的方式也相对比较简单,只要设计好xml Schema.在业务流程中把各种控件按你设想的流程拖进去.再设置一下,部署到BizTalk中去.就可以运行了:)
同时,BizTalk可以直接发布成WebService,为开发解决了很多的麻烦...

总之,BizTalk这个软件真是太强大了..一个字."爽".

在学习过程中,我是在虚拟机上跑BizTalk的.自己的机器的内存本来就不高,CPU也不强,跑起来真是好慢啊:(
开发的时候还比较好,不至于很慢.但是一旦部署完了,业务流程跑起来的时候发现错误了,想要进行调试就很麻烦了.
(你想想,在虚拟机中,开着VS.NET 2003.,BizTalk,SQL Server,再通过BizTalk的 " 运行状况和活动跟踪" 来调试业务流程,那不惨不忍睹啊:( )

幸好BizTalk提供了"表达式",可以调用.NET中的所有静态方法...
这下子,我们可以直接使用.NET中的FileStream,把流程经过的每一步都记录下来了(虽然比较麻烦,但是像我这种刚开发学习的人而言是比较方便了~)
如图:
biz1.JPG


1,建议一个新的dll工程.增加一个Log类,提供一个静态方法Write.用于把信息写入到一个文件.生成一个强签名文件,并加入到GAC中.
示例代码如下:
    public class Log
    
{
        
private static string m_file = @"C:\Temp\info.txt";
        
private static FileStream fs = new FileStream(m_file,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.ReadWrite);

        
public static void Write(string Message)
        
{
            fs.Seek(
0,SeekOrigin.End);
            Message 
+= "\r\n";
            
byte[] buffer = Encoding.ASCII.GetBytes(Message);
            fs.Write(buffer,
0,buffer.Length);
            fs.Flush();
        }

2.在Biztalk的有业务流程的项目中加入这个dll的引用.
在想要记录的地方加入一个"表达式"(如上图).在其属性->表达式中填入下面代码:
    Namespace.Log.Write(Message);
把Namespace换成上面Log类的实际的Namespace,Message就写你自己想写到文件中的信息.

3,编译,部署.测试:)
如果一切正常,那么你将会看到在预期的路径下面出现一个info.txt文件,里面记录着你的这个业务流程的真实运行路径.
通过这个比较简单的方法就可以很轻松的知道此业务流程那里有问题了~
可以先不用使用 "运行状况和活动跟踪" 来查看了(免得系统太慢,等得受不了)

国外有一个老兄 Scott Colestock写了一个文章,关于在BizTalk中使用Log4Net来跟踪流程运行状况的.
有兴趣的可以看看这个文章:
Diagnostic Tracing with BizTalk 2004
ps,这们老兄有一个项目,是使用Nant来Deploy Biztalk 2004的Solution :),感觉比较好玩~

总结:其实这很简单的,就是使用了BizTalk 2004的.NET的支持,可以在"表达式" 中调用所有的.NET的静态方法...

汗啊,总是感觉没发些什么比较有技术含量的文章啊:(