http://www.cnblogs.com/StoneGarden/archive/2012/02/08/2343294.html

MS CRM 2011的自定义和开发(11)——插件(plugin)开发(四)

上面几篇文章介绍了Microsoft Dynamics CRM 2011中如何进行插件开发,本文将介绍插件的调试。

调试的基本步骤是

1. 注册、部署插件,这部分内容在上一篇Blog中已经介绍,不再赘述;

2. 将插件的pdb文件拷贝到CRM安装目录下的“Server\Bin\Assembly”文件夹下,一般而言,如果使用默认配置安装的CRM系统,那么此文件夹的全路径是“C:\Program Files\Microsoft Dynamics CRM Server\Server\bin\assembly”;

3. 配置调试器,即通过Visual Studio .net的附加到相应进程进行调试:

  • 对于运行于服务器上的插件,需要附加的进程是w3wp.exe进程;
  • 如果是调试脱机客户端中的插件,附加的进程是Microsoft.Crm.Application.Hoster.exe;
  • 如果是异步方式运行的插件,那么附加的进程是CrmAsyncService.exe
  • 如果是运行在沙盒Sandbox中的插件,那么附加的进程是Microsoft.Crm.Sandbox.WorkerProcess.exe

    4. 在插件类中,设置断点;

    5. 开始调试,进行界面操作,以触发插件的运行,以便可以在IDE中开始插件的调试工作。

以下是各个步骤的截屏

1. 插件注册,请参看文章《MS CRM 2011的自定义和开发(11)——插件(plugin)开发(三)》;

2. 拷贝pdb文件。首先打开插件项目的文件夹,导航到bin\debug目录下,找到插件程序集相关的pdb文件。如下图的红色方框区域所示

将该文件拷贝到CRM$\Server\Bin\Assembly目录下。

3. 配置调试器,本例中,使用Visual Studio .Net 2010进行调试。点击“调试”—> “附加到进程”,系统弹出“附加到进程”对话框,在其中列出了当前服务器上运行的进程,根据待调试插件的运行模式、部署模式,选择目标进程,而后点击“附加”按钮即可。如果在进程列表中没有目标进程,那么,点击“显示所有会话中的进程”复选框。

在附加w3wp.exe进程时,如果服务器的IIS中有多个站点同时处于活动状态,进程列表中就会出现多个w3wp.exe进程,这些进程之间的区别只是第二列ID列的信息不同,那么哪个进程是我们需要附加的进程呢?对于这种情况,可以通过IIS管理器来获得需要附加的进程。运行IIS管理器,在左侧导航栏中,点击第二个节点,而后再在右侧的内容区域点击“工作进程”,如下图所示。

内容区域会切换到工作进程列表界面,其中显示了当前IIS中所有处于运行状态的W3wp进程,其中第一列是w3wp.exe进程所对应的应用程序池名称,第二列信息就是进程ID。效果如下图所示,其中,蓝色区域圈定的就是进程ID信息,这将会有助于我们在“附加到进程”对话框中选择正确的进程予以附加:

4. 设置断点,这没有啥可以说的了,对于经常使用Visual Studio.Net的各位同学们已经是驾轻就熟;

5. 运行应用程序,或者使用界面操作的方式,或者使用C#开发的测试程序,总而言之,就是调用组织服务,发起某个请求,以触发插件的运行。本例中的插件是注册于account的pre-create事件上。所以呢,就是在crm中新建客户记录的时候会触发插件的运行。ok,通过浏览器操作,新建一条客户记录。记录内容如下图所示。

点击保存按钮,会向MS CRM的组织服务发送创建请求,从而触发插件的运行,此时,由于VS附件到进程已经开启,将可以对插件进行调试了。效果如下图所示:

如果Visual Studio没有被触发,或者插件类的断点没有起作用。首先,要看一下当前MS CRM是否允许进行debug,若否,可打开debug开关。打开Debug开关的步骤如下:

打开CRM$\CrmWeb目录,其中CRM$指的是微软CRM的安装目录,本例中是“C:\Program files\Microsoft Dynamcis CRM Server”;

找到web.config文件,使用任意编辑器打开该文件;

在web.config文件中找到,<compiliation defaultLanguage=”C#” debug=”…>这一句。默认情况下,debug开关的值是false,为了能够调试,需要将其设置为true,设置完成后,重新启动IIS;

设置debug开关项的示意图如下所示。

此外,除了使用调试器进行debug之外,还可以借助日志与跟踪服务,来确定插件的执行顺序,这样可以方便我们在不启用VS等调试工具的前提下,确定问题的根源所在。跟踪服务ITracingService,也是插件执行上下文中的一个组成部分,可以通过IServiceProvider.GetService()方法获得,样例代码例如:

ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

ITracingService实例化时候,可以利用trace方法,创建跟踪日志信息,例如

tracingService.Trace(“Plug-in execution begin”);

MS CRM 2011的自定义和开发(11)——插件(plugin)开发(四)的更多相关文章

  1. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(三)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2340661.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  2. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(一)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/02/2336147.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  3. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(二)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2339490.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  4. 【Mybtais】Mybatis 插件 Plugin开发(一)动态代理步步解析

    需求: 对原有系统中的方法进行'拦截',在方法执行的前后添加新的处理逻辑. 分析: 不是办法的办法就是,对原有的每个方法进行修改,添加上新的逻辑:如果需要拦截的方法比较少,选择此方法到是会节省成本.但 ...

  5. Android组件化和插件化开发

    http://www.cnblogs.com/android-blogs/p/5703355.html 什么是组件化和插件化? 组件化开发就是将一个app分成多个模块,每个模块都是一个组件(Modul ...

  6. YYDS: Webpack Plugin开发

    目录 导读 一.cdn常规使用 二.开发一个webpack plugin 三.cdn优化插件实现 1.创建一个具名 JavaScript 函数(使用ES6的class实现) 2.在它的原型上定义 ap ...

  7. CRM 2011 开发中遇到的问题小结

    1.将Retrive 方法改成 RetrieveMultiple时 如果指定的ColumnSet 没有指定主键(entiryname+id),要显示增加实体的主键.否则在调用 Retrieve方法时返 ...

  8. Microsoft Dynamics CRM 2011的组织服务中的RetrieveMultiple方法(转)

    本篇文章,介绍Microsoft Dynamics CRM 2011的组织服务中的RetrieveMultiple方法. RetreiveMultiple方法,用于获取实体的多个实例,该方法的签名如下 ...

  9. Microsoft Dynamics CRM 2011 安装完全教程

    作者:卞功鑫,转载请保留.http://www.cnblogs.com/BinBinGo/p/4302612.html 环境介绍 WINDOWS 2008 R2 Datacenter Microsof ...

随机推荐

  1. 关于UIMenuController的使用 弹出菜单 UIMenuItem

    UIMenuController *menuController = [UIMenuController sharedMenuController];        UIMenuItem *menuI ...

  2. c++ 走向高级之日积月累

    1.enum:http://en.cppreference.com/w/cpp/language/enum 2.weak_pr:http://en.cppreference.com/w/cpp/mem ...

  3. poj 1475 uva 589 - Pushing Boxes

    题目大意 人推箱子从起点到终点,要求推箱子的次数最少,并打印出来人移动的路径. 题目分析 对于箱子进行宽搜的同时,要兼顾人是否能够把箱子推到相应的位置 每一次对箱子bfs 然后对人再bfs #incl ...

  4. Phonegap开发的前后台数据交互

    在用Phonegap开发时,需要进行前后台数据交互,在网上找资料,很多东西让人一头雾水,最后借鉴了下面的博客: http://blog.sina.com.cn/s/blog_681929ae01017 ...

  5. php函数 date() 详细资料

    date_default_timezone_set(PRC); /*把时间调到北京时间,php5默认为格林威治标准时间*/ date () a: "am"或是"pm&qu ...

  6. ZOJ 1068 P,MTHBGWB

    原题链接 题目大意:给定一个字符串,先用Morse Code编码,把编码倒序,再解码成字符串.现给定处理后的字符串,求原始信息. 解法:用C++String类的函数.每次读入一个字符,就在string ...

  7. 计算2的N次方

    总时间限制:  1000ms 内存限制:  65536kB 描述 任意给定一个正整数N(N<=100),计算2的n次方的值. 输入 输入一个正整数N. 输出 输出2的N次方的值. 样例输入 5 ...

  8. centOS 6.x 版本安装 node.js 4.x 以上版本的方法

    由于 node 4.x 以上版本,通过编译源代码来安装,对 GCC 的版本有要求,而 centos 的 GCC 版本不够,更新 GCC 也很麻烦,所以只能通过别的方式解决. 这里主要介绍直接下载编译后 ...

  9. 排序算法总结(一)插入排序【Insertion Sort】

    最近在忙着找工作,以前看的排序算法都忘记了,悲剧啦T  T现在来回顾一下吧. 这边推荐一个算法可视化的网站,非常有用.http://visualgo.net/ 一.插入排序的思想(Wikipedia) ...

  10. 翻译:Universal Image Loader

    本文转载于:http://blog.csdn.net/tianxiangshan/article/details/9399183 All manipulations are held by the I ...