2017-03-07 72 views
1

目的:我想只要有人创建了一个新的任务,验证它,如果需要取消。远程事件预处理器不工作

环境详细信息:目前我正在使用Project Server 2013并尝试使远程事件处理程序正常工作。远程事件处理程序中WCF服务,这是在ASP.NET Web应用程序,与Project Server一起在IIS上承载的Windows服务器上。

目前,我有我的应用程序2个WCF服务:

  1. ProjectEventReceiver.svc

    namespace EventHandlersTest 
    { 
        public class ProjectEventReceiverDemo : IProjectEventReceiverRemote 
        { 
         ... 
         public ProjectPreEventArgs OnCreatingRemote(PSContextInfo contextInfo, Guid eventHandlerUid, ProjectPreEventArgs e) 
         { 
          if (/*invalid project name for example*/) 
          { 
           e.Cancel = true; 
          } 
          return e; 
         } 
         ... 
        } 
    } 
    

    这一个是在SharePoint管理中心Administation绑定 - > - >服务器侧面事件处理程序 - >Project - Creating这样的事件:

    类名称:EventHandlersTest.ProjectEventReceiverDemo

    地址http://localhost:6569/EventHandlersTest/ProjectEventReceiver.svc

    网址是好的,我可以访问.cvs文件浏览器。 这个处理程序完美地工作(例如,当我创建一个名称无效的新企业项目 - 事件被捕获,创建被取消,我可以看到我的自定义日志显示类已构建,方法OnCreatingRemote被调用)。

现在与第二服务本身的问题:

  • TaskEventReceiver.svc

    namespace EventHandlersTest 
    { 
        public class TaskEventReceiverDemo : IStatusingEventReceiverRemote 
        { 
         ... 
         public StatusCreateTaskPreEventArgs OnTaskCreatingRemote(PSContextInfo contextInfo, Guid eventHandlerUid, StatusCreateTaskPreEventArgs e) 
         { 
          // just cancel everything for now 
          e.Cancel = true; 
          return e; 
         } 
         ... 
        } 
    } 
    

    这一个是绑定到事件Statusing - TaskCreating像这样:

    类名称:EventHandlersTest.TaskEventReceiverDemo

    地址http://localhost:6569/EventHandlersTest/TaskEventReceiver.svc

    再次,网址是正确的 - 我可以在浏览器中访问它。

  • 现在问题的流程:我创建了一个SharePoint任务列表项目,然后我去那里,点击New Task,填写所需的名称 - 它创建的任务。没有接收到事件时,不创建TaskEventReceiverDemo类的对象和不调用方法OnTaskCreatingRemote

    我不确定IStatusingEventReceiverRemote是否是一个正确的界面,因为reference中没有真正有用的描述,所以我只根据方法名进行了假设。

    我也尝试实施IResourceEventReceiverRemote,尤其是方法OnCreatingRemote并将其绑定到Resource - OnCreating - 结果相同(并且它似乎是逻辑因为任务不是资源)。

    问题:有人可以澄清一下,当我创建一个任务,如问题流程中所描述的那样,会引发什么事件的名称?或者,也许我做错了什么,不能弄明白。

    在此先感谢。

    回答

    0

    看起来像我发现一个aswer我已经创建了覆盖在命名空间Microsoft.Office.Project.Server.Events所有接口所需的所有服务,并在每一个实现的方法也记录到文件(至少部分之一)

    之后我订购了SP Central Admin的所有服务器端事件处理程序,并开始使用SharePoint任务列表项目类型的CRUDing任务进行播放。

    我希望这可以通过我的日志记录向我透露所需的方法。但是,结果令人惊讶:日志中没有任何内容,这意味着SharePoint任务列表项目的CRUD任务不会触发任何事件

    顺便说一句,处理程序是正确的,订阅正确,因为我可以看到日志说创建项目。而对于其他类型的项目 - 企业项目 - 任务事件实际上解雇,是显而易见的:Statusing - TaskCreating

    我将不胜感激,如果有人可以解释我为什么事件,但不是在创造企业项目任务做火SP任务列表之一,因为我只是部分回答了我的问题。