就在这个月,负责微软Developer Devision工作的微软全球副总裁Soma先生写了一篇博客介绍Visual Studio 2008和即将发布的Visual Studio 2010中支持并行程序开发的一系列工具。在这篇博客(中文翻译版)中,Soma先生不仅介绍了用于开发MPI程序的MPI debugger,还介绍了用于开发Windows HPC Server 2008中集群面向服务架构(Cluster SOA)应用的SOA Debugger插件。在我们前面一篇博客中已经对MPI Debugger的功能做了介绍,其实SOA Debugger也是我们小组努力工作的成果。通过本篇博客,我想请大家和我一道预览即将发布的HPC SOA C# Cluster Debugger插件。
大家知道集群面向服务架构是我们随Windows HPC Server 2008的发布而新推出的并行应用架构和编程模型。通过集群面向服务架构,我们可以把原先运行在单机上的WCF应用扩展成运行在`Windows HPC Server集群环境中的并行应用。要创建一个SOA应用程序大致上需要经历以下的三步:创建服务(WCF Service);将服务部署到集群中;创建客户端应用。如果我们想调试包括客户端和服务在内的整个应用,还要加上如下的步骤:1)在运行服务的计算节点上安装并运行远程调试器(msvsmon.exe);2)在Visual Studio中运行并调试客户端程序;3)在SOA会话(SOA Session)被创建以后,将Visual Studio调试器附加(attach)到计算节点上的服务宿主进程(HpcServiceHost.exe)上从而调试服务进程。这样调试一个SOA应用一共需要3+3=6个步骤,这还不包括每次修改服务的代码还需要重新执行服务部署的过程。听上去是不是很复杂?别急,下面随我看看SOA Debugger如何为你简化SOA应用开发和调试的体验!
安装SOA Debugger插件后,在Visual Studio的新建C#项目的对话框中,我们看到了一个新的项目类型:SOA Client。没错,就是它了!
建立一个SOA Client项目并把它命名为MySOAClient。在我们研究这个新项目之前,还是让我们进行SOA开发的第一步:创建服务程序。大家知道SOA服务程序其实就是一个WCF服务,你可以把现有的WCF服务项目添加到刚刚的MySOAClient解决方案中,也可以在这个解决方案中新建一个WCF服务项目。在我的示例中,我在解决方案中新建了一个叫“EchoService”的简单WCF服务。在创建完服务之后,让我们跳过下一步“将服务部署到集群中”,因为下面我们将看到SOA Debugger可以自动帮我们完成服务部署的工作。
下面让我们回到客户端项目来创建客户端应用程序。大体上编码SOA客户端程序和编码普通的WCF客户端程序比较类似,在此就不一一赘述,具体信息大家可以参看Cluster SOA架构白皮书。客户端编码完成之后,我们还需要对项目的一些属性进行设置才能进行集群上的调试工作。在Visual Studio的解决方案浏览器中右键点击MySOAClient项目,点击属性打开项目属性页面,如下图,
我们可以看到这个项目比一般的C#项目多了一个SOA Settings的属性标签。在SOA Setting的属性页中,我们首先在Head node下拉列表中选择我们的集群头节点名。这里的头节点名必须与我们在客户端代码中创建的会话启动信息相一致。比如在我的代码中,
……
SessionStartInfo startinfo = new SessionStartInfo("SHPC-0052", "EchoService");
于是这里我就选择头节点为“SHPC-0052”。接下来我们需要在Available service列表中勾选需要调试的WCF服务。在这个列表中会列出当前解决方案中的所有WCF服务类型的项目,我们只需要选择客户端代码调用的服务(或者多个服务)即可。这里的服务名和服务项目名称以及会话启动信息中的服务名都应该是相同的(在这里是“EchoService”)。除了头节点名和被调试的服务以外,其他的属性都有合适的默认选项,我们暂时不要改变它们的设定。好了,调试的准备工作全部完成了,让我们开始调试吧!
首先将MySOAClient项目设置为调试的启动项目,随后我们在客户端程序创建SOA会话(Microsoft.Hpc.Scheduler.Session.Session.CreateSession(startinfo))的代码后放置一个断点。按“F5”启动调试器,MySOAClient程序会运行到CreateSession()之后中断。这时SOA会话以及SOA服务job已经创建完成了,让我们来看一看Visual Studio是不是已经附加到所有的服务进程上。从调试菜单打开进程工具窗口,我们可以看到,
Visual Studio调试器已经附加到所有的服务宿主进程上。WCF服务部署,远程调试器的启动以及附加远程进程的工作都被SOA Debugger自动完成了,是不是有WOW!的感觉呢?既然我们已经完成了服务进程的附加步骤,我们就可以直接调试WCF服务的代码了。所有现有的调试器功能我们都可以使用,包括在在服务代码的断点上中断,F10/F11的单步调试,表达式求值(Watch)以及条件断点等等。当调试结束后,SOA Debugger还会自动完成服务的清理工作。
我们已经完成了整个SOA开发/调试的过程,回头看看是不是很简单呢?原先的六个步骤最终被简化为:1)创建服务;2)创建客户端程序并设置SOA调试选项;3)F5!这三步,是不是很简单呢?
以上就是对SOA Debugger的简介,SOA Debugger中还有很多很cool的功能,包括:调试不在Visual Studio解决方案中的WCF服务; 为被调试的服务部署额外的文件;只调试运行在特定计算节点上的服务;只调试某些特定的服务请求(Service Request)。对于这些功能我就不一一介绍了,我期待你试用我们即将发布的SOA Debugger之后自己亲身体验所有这些实用的功能!我们的开发工作还在进行之中,在最终发布之一定还会有一些改动,如果大家有什么意见或者问题,欢迎回帖。谢谢!
Ps.,Visual Studio 2008中的MPI Debugger 插件已经发布了,欢迎大家从这里免费下载使用。Visual Studio 2010中的MPI Debugger将随Visual Studio 2010发布,敬请期待。