动机:
正如我们在Project Server Architecture中所读到的
PSI 中用于 Web 服务的基于 SOAP 的 ASMX 接口在 Project Server 2013 中仍然可用,但已弃用。
原样
我有一些用于与 Project Server 交互的 PowerShell 客户端片段。与服务器通信的标准方式是 PSI ASMX Web 服务。
成为
我想将这些片段重构为使用 PSI WCF Web 服务的标准。
结果
例如,下面的简单代码可以正常工作:
$Passwd = Get-Content $home\Documents\Password.txt | ConvertTo-SecureString
$Credential = New-Object -typename System.Management.Automation.PsCredential -argumentlist "user_name",$Passwd
$PWAUrl = "http://project_server_name/PWA"
$ProjSvcURL = $PWAUrl + "/_vti_bin/PSI/Project.asmx?wsdl"
$ProjSvcProxy = New-WebServiceProxy -uri $ProjSvcURL -credential $Credential
$projDataSet = $ProjSvcProxy.ReadProjectList()
$projDataSet.Tables[0].Rows.Count
但简单的转换:
$Passwd = Get-Content $home\Documents\Password.txt | ConvertTo-SecureString
$Credential = New-Object -typename System.Management.Automation.PsCredential -argumentlist "user_name",$Passwd
$PWAUrl = "http://project_server_name/PWA"
$ProjSvcURL = $PWAUrl + "/_vti_bin/PSI/ProjectServer.svc"
...
失败并显示以下消息:
New-WebServiceProxy :请求失败,HTTP 状态为 400:错误请求。
这是 IIS 日志摘录:
2014-01-05 13:50:41 10.15.43.7 GET /PWA/_vti_bin/PSI/ProjectServer.svc - 80 - XXX.XXX.XXX.XXX Mozilla/4.0+(兼容;+MSIE+6.0;+MS+Web +服务+客户端+协议+2.0.50727.5472) 401 1 2148074254 125
2014-01-05 13:50:41 10.15.43.7 GET /PWA/_vti_bin/PSI/ProjectServer.svc - 80 - XXX.XXX.XXX.XXX Mozilla/4.0+(兼容;+MSIE+6.0;+MS+Web +服务+客户端+协议+2.0.50727.5472) 401 2 5 328
2014-01-05 13:50:41 10.15.43.7 GET /_vti_bin/PSI/ProjectServer.svc/ntlm - 80 用户名 XXX.XXX.XXX.XXX Mozilla/4.0+(兼容;+MSIE+6.0;+MS+Web +服务+客户端+协议+2.0.50727.5472) 400 0 0 140
2014-01-05 17:58:33 10.15.43.7 GET /PWA/_vti_bin/PSI/ProjectServer.svc - 80 - XXX.XXX.XXX.XXX Mozilla/4.0+(兼容;+MSIE+6.0;+MS+Web +服务+客户端+协议+2.0.50727.5472) 401 2 5 312
2014-01-05 17:58:33 10.15.43.7 GET /PWA/_vti_bin/PSI/ProjectServer.svc - 80 - XXX.XXX.XXX.XXX Mozilla/4.0+(兼容;+MSIE+6.0;+MS+Web +服务+客户端+协议+2.0.50727.5472) 401 1 2148074254 156
2014-01-05 17:58:33 10.15.43.7 GET /_vti_bin/PSI/ProjectServer.svc/ntlm - 80 用户名 XXX.XXX.XXX.XXX Mozilla/4.0+(兼容;+MSIE+6.0;+MS+Web +服务+客户端+协议+2.0.50727.5472) 400 0 0 109
有趣的是,我找不到任何将 WCF PSI 与 PowerShell 结合使用的示例。有没有人尝试过这样做?有人成功吗?任何人都可以发布任何片段吗?