在 project-server 2013 中创建任务的远程前置事件处理程序不起作用

Remote pre-event handler for task creating in project-server 2013 doesn't work

目标:我希望每当有人创建新任务时,验证它并在需要时取消。

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

目前我的应用程序中有 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 中央管理 -> ... -> 服务器端事件处理程序 -> 到事件 Project - Creating 像这样:

    Class Name: EventHandlersTest.ProjectEventReceiverDemo

    Url: http://localhost:6569/EventHandlersTest/ProjectEventReceiver.svc

    url 没问题,我可以在浏览器中访问那个 .cvs 文件。 此处理程序完美运行(例如,当我创建一个名称无效的新企业项目时 - 事件被捕获,创建被取消并且我可以看到我的自定义日志显示构建了 class 并调用了方法 OnCreatingRemote)。

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

  1. 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 是这样的:

    Class Name: EventHandlersTest.TaskEventReceiverDemo

    Url: http://localhost:6569/EventHandlersTest/TaskEventReceiver.svc

    同样,url 是正确的 - 我可以在浏览器中访问它。

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

我不确定 IStatusingEventReceiverRemote 是否是一个正确的接口,因为 reference 中没有真正有用的描述,所以我只根据方法名称做出假设。

我还尝试实现 IResourceEventReceiverRemote,特别是方法 OnCreatingRemote 并将其绑定到 Resource - OnCreating - 结果相同(这似乎是合乎逻辑的,因为任务不是资源) .

问题:有人可以阐明当我创建任务(如有问题的流程中所述)时将引发的事件的名称吗?或者我做错了什么,想不通。

提前致谢。

看来我找到了答案(至少是部分答案)

我已经创建了涵盖命名空间 Microsoft.Office.Project.Server.Events 中所有接口所需的所有服务,并且在每个实现的方法中我都记录到一个文件中。

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

我希望这会在我的日志记录的帮助下向我揭示所需的方法。然而,结果有点令人惊讶:日志中没有任何内容,这意味着 SharePoint 任务列表项目的 CRUDing 任务不会触发任何事件

顺便说一句,处理程序是正确的并且订阅正确,因为我可以看到日志说创建项目。对于另一种类型的项目 - 企业项目 - 任务事件实际触发并且很明显:Statusing - TaskCreating,等等

如果有人能向我解释 为什么 事件会在 Enterprise Project 中创建任务而不是在 SP 任务列表一中触发,我将不胜感激,因为我只回答了部分问题。