我正在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的哪个部分。
答案 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服务(如果我发现我将发布的内容,我仍然在其上)。