1

我正在 MS Project Server 中创建一个事件处理程序。此事件处理程序正在调用类库(dll 文件)。事件处理程序是通过单击而不是代码在 MS 项目中设置和触发的。在这个类库中,我有一个对 Web 服务的服务引用。但是,每当触发事件时,当我通过“附加到进程”选项调试类库时,都会看到以下错误:

在 ServiceModel 客户端配置部分中找不到引用合同“PSS.Project.ProjectSoap”的默认端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此合同匹配的端点元素。

这是我的 app.config 的样子:

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="basicHttpBehavior">
          <clientCredentials>
            <windows allowedImpersonationLevel="Impersonation" />
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="basicHttpConf" sendTimeout="01:00:00" maxBufferSize="500000000"
          maxReceivedMessageSize="500000000">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="500000000" />
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm"
              realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
        <binding name="ProjectSoap">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://xxxx/pwa/_vti_bin/PSI/ProjectServer.svc"
        behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
        bindingConfiguration="basicHttpConf" contract="SvcProject.Project"
        name="basicHttp_Project" />
      <endpoint address="http://xxxx/pwa/_vti_bin/PSI/ProjectServer.svc"
        behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
        bindingConfiguration="basicHttpConf" contract="SvcResource.Resource"
        name="basicHttp_Resource" />
      <endpoint address="http://xxxx/pwa/_vti_bin/PSI/ProjectServer.svc"
        behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
        bindingConfiguration="basicHttpConf" contract="SvcStatusing.Statusing"
        name="basicHttp_Statusing" />
      <endpoint address="http://xxxx/pwa/_vti_bin/PSI/Project.asmx?wsdl"
        binding="basicHttpBinding" bindingConfiguration="ProjectSoap"
        contract="PSS.Project.ProjectSoap" name="ProjectSoap" />
    </client>
  </system.serviceModel>
</configuration>

我还确认 URL:http://xxxx/pwa/_vti_bin/PSI/Project.asmx?wsdl有效。

在cs文件中,错误出现在以下代码中:

ProjectSoapClient projectSvc = new ProjectSoapClient();

当我在控制台应用程序中做同样的事情时,它可以工作,但是当使用类库时,它会失败。我在这里阅读了一些问答,我知道当我从类库调用服务引用时,我需要将服务引用的配置文件包含到类库中,但我不太确定如何以及将在我的情况下配置文件以及我应该将它添加到 app.config 的哪个部分。

4

1 回答 1

0

我已经能够在 Project Server 事件接收器 DLL 中调用 WCF 服务。

为此,请遵循以下“技巧”:

1.- 出于配置目的,DLL(您的代码)在 Microsoft.Office.Project.Server.Eventing.exe 进程中执行,该进程(在默认配置中)位于:“C:\Program Files\Microsoft Office Servers \14.0\Bin”。对于自定义安装,打开任务管理器并右键单击“Microsoft.Office.Project.Server.Eventing.exe”并选择转到文件。因此,您需要将任何需要写入文件的配置都需要放在文件中的该目录中:“Microsoft.Office.Project.Server.Eventing.exe.config”。我已经使用这个文件来放置一个数据库连接字符串,并且我已经能够使用 System.Configuration 库来读取它。但是,并非所有配置部分都有效,我尝试放置 appSettings 并引发了 Sharepoint 错误。

2.- 对于与 Project Servers PSI 的交互,请使用 WCF 接口而不是 ASMX 接口(我不知道为什么,但效果更好)。我建议以编程方式使用 WCF(在 google 上快速搜索将使您了解如何在代码上设置绑定)。

我希望这对你有帮助,我向你保证它有效。现在我正在尝试在 DLL 中调用 ASMX 服务(我仍在使用它,如果我找到了我会发布的内容)。

于 2013-09-13T08:11:39.480 回答