分类目录
博客好友
资源推荐
Category Archives: 计算机技术
在ASP.net中使用State Machine Workflow
在ASP.net里应用Workflow和客户端程序中差别还是很大的,但这本Pro WF书里对这部分一笔带过,给了个顺序工作流的例子,但看完了还是没什么头绪,后天来找到了一个例子,才弄明白了怎么做。
首先,在ASP.net的Web应用里,因为和用户交互是单线程的,异步的执行是没法把结果反馈给用户的,所以需要以同步(Synchronized)的方式执行工作流,这就需要创建一个ManualWorkflowSchedulerService得实例schedule,注册到WorkflowRuntime上,来覆盖了默认的DefaultWorkflowSchedulerService。在创建了Workfow Instance并调用了instance.Start()的时候,工作流还并没有开始运行,但已经On schedule了,这时候再调用schedule.RunWorkflow(instance.InstanceId),这时工作流就开始执行了,RunWorkflow会在工作流进入等待,或者结束的时候返回。
另外就剩下工作流运行环境初始化的问题了。这部分工作可以在Global.asax文件里完成,一个ASP.net应用里,WorkflowRuntime的实例只需要又一个,所以在各个页面里去初始化就太浪费了,在Application_Start和Application_End里完成WorkflowRuntime的初始化和清理工作:
void Application_Start(object sender, EventArgs e)
{
System.Workflow.Runtime.WorkflowRuntime workflowRuntime = new System.Workflow.Runtime.WorkflowRuntime("WorkflowRuntime");
System.Workflow.ComponentModel.Compiler.TypeProvider typeProvider = new System.Workflow.ComponentModel.Compiler.TypeProvider(workflowRuntime);
typeProvider.AddAssembly(typeof(Ganji.OA.Workflow.ExpensesClaim).Assembly);
workflowRuntime.AddService(typeProvider);
workflowRuntime.StartRuntime();
Application["WorkflowRuntime"] = workflowRuntime;
}
void Application_End(object sender, EventArgs e)
{
System.Workflow.Runtime.WorkflowRuntime workflowRuntime = Application["WorkflowRuntime"] as System.Workflow.Runtime.WorkflowRuntime;
workflowRuntime.StopRuntime();
}
That’s all
关于Windows7的localhost
在Windows7的hosts文件里,不再有把localhost指向127.0.0.1的定义了,而是给出了这样一个说明:
# localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost
把localhost的解析也交给DNS了,不知道是出于什么考虑。造成的结果是,在本地开发时,IIS里运行的PHP用localhost连接不到数据库了,让我折腾了很久。在本地开发.net时,调试时用IE比FF,Chrome要快很多,我还以为微软搞了什么后门,原来是因为IE里缓存了DNS的查询结果,而FF和Chrome没有,所以总看到FF下面的状态栏显示“正在解析localhost”,在hosts里加上localhost的设置之后,FF和Chrome也和IE一样了。
Posted in 计算机技术 Leave a comment
在IIS7.5里安装PHP5.3
今天在网上看到了微软提供的一个WinCache项目,一个相当于APC的PHP缓存加速器,官网上的Benchmark说是和Zend Server+Zend Optimizer性能相当,似乎还好一些,正好最近主要搞.net,装上了IIS,为了省出点儿内存,就把Apache删掉了,试试在IIS下配置一下PHP5.3看看怎么样。
先去下载了Windows下的PHP5.3.1 VC9 non thread safe 的安装程序,要注意,那个WinCache只支持非线程安全的版本,另外想用Apache的话,要下载VC6的版本,VC9编译的似乎不支持Apache(选择菜单里没有,也没有试过到底能不能用)。
安装之前要把IIS里的CGI功能装上,位于打开或关闭Windows功能 > Internet信息服务 > 万维网服务 > 应用程序开发功能 > CGI,现在的PHP安装程序已经很智能了,安装结束后,把默认网站的文档路径设置到原来的htdocs,从浏览器里打开localhost就能看到自己PHP的应用了,另外建议在根节点的FastCGI设置里,把FastCGI属性中的监视对文件做的更改设置为php.ini的路径,这样在更新了php配置之后,IIS就会刷新php-cgi的设置了。
另外在安装完之后还出现了一个奇怪的问题,用localhost为主机名连接mysql数据库时总是连接超时,改成127.0.0.1才能正常,看了一下hosts文件发现,Windows7的hosts文件里没有定义localhost,但在命令行ping localhost是正常的,还没有深究。
P.S. 今天在这个PHP环境里装了个Drupal,运行速度明显要比WAMP要快不少。另外,Wincache也有个wincach.php,相当于APC的apc.php,可以查看当前的缓存使用状况,不过wincache好像没有提供用户变量的缓存功能。
Windows Workflow Foundation学习心得
近来因为工作需要,转到.net门下了,转眼过去快两个月,感觉收获还是很大的,又过去的Java经验,对学习微软的一堆框架还是很有益处的。最近在学习Windows Workflow Foundation,.net里的工作流框架。这还是第一次接触工作流,对工作流都还没有概念,在皮皮上找了本Pro WF Windows Workflow in .NET 3.5开始慢慢啃。
工作流,并不像我原本想象的那样,仅仅是个什么工作的流程。我的理解,工作流是一个对程序流程逻辑与具体操作的分离,程序的流程和逻辑可以在工作流图上清晰的展现,图中每个步骤或状态中的操作就不在掺杂着太繁杂的逻辑结构了。这么做的好处呢,就是从复杂的程序逻辑,抽出一个大的轮廓,通过一个工作流图,把大的问题切割成一个个小块儿了。其实,所有的架构设计不都是为了分解复杂的问题吗。
VS2008里的工作流编辑器,让创建工作流的工作变得相当简单和直观,简单了解了一些常用的Activity的用途和使用之后,半天时间就足够学会用工作流图表达程序逻辑了。
可能是因为我对C#的委托和事件不够熟悉,在工作流和Host的通信上花费了不少时间,才理清了这个过程。因为Workflow和Host程序是在不同线程中运行的,所以相互之间的调用只能通过delegation和event。Host通过触发ICustomeService接口中的事件,调用注册在这个事件上的HandleExternalEventActivity。另一个方向上,Workflow调用ICustomService接口中的方法,方法里触发一个CustomService中定义的公开事件,而Host程序把需要被调用的代码,通过委托注册到这个事件上,从而被Workflow调用。
先不写了,明天有空了补上个例子和图片吧。
用于MySQL的WF WorkflowPersistenceService
因为微软的Workflow Foundation里对WorkflowPersistenceService只提供了一个用于SqlServer的实现,对于想用别的方式保存工作流状态的应用就需要自己实现WorkflowPersistenceService了,今天自己写了个用于MySQL的实现,应该说是一个最简陋的实现了,只完成了最简单的保存和恢复的功能,高级点儿的加锁之类的功能还没弄明白。不过我想这些对学习WF的朋友应该也能帮上点儿忙。
Posted in 计算机技术 Tagged MySQL, Windows Workflow Foundation, WorkflowPersistenceService Leave a comment
论btchina的倒掉