当我调用类库时,来自类库的Soap服务调用失败。适用于控制台应用程序

时间:2013-07-14 02:09:47

标签: web-services sharepoint app-config project-server

我正在MS Project Server中创建一个事件处理程序。此事件处理程序正在调用类库(dll文件)。事件处理程序是通过点击而不是代码在MS Project中设置和触发的。在这个类库中,我有一个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>

我还确认网址:http://xxxx/pwa/_vti_bin/PSI/Project.asmx?wsdl正在运作。

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

ProjectSoapClient projectSvc = new ProjectSoapClient();

当我在控制台应用程序中执行相同的操作时,它可以工作,但是当使用类库时,它会失败。我在这里读了一些Q&amp; A,我知道当我从类库调用服务引用时,我需要将服务引用的配置文件包含到类库中,但我不太清楚如何以及在何处从我的案例中带来配置文件,我应该将它添加到app.config的哪个部分。

1 个答案:

答案 0 :(得分: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(在谷歌上快速搜索会告诉你如何在代码上设置绑定)。

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