我正在尝试使用Powershell的dot net API在FileHold中进行搜索。该脚本可以正常登录,但随后我收到此错误,暗示我未获得授权。
Exception calling "LoadSmartFolder" with "1" argument(s): "The request failed with HTTP status 401: Unauthorized."
At line:8 char:57
+ $searchCriteria = $lmDocumentFinderProxy.LoadSmartFolder <<<< ( $savedSearchId )
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
以下是一些演示此问题的示例代码。
$userId = "sysadm"
$password = "12345"
$clientType = "CustomClient"
$savedSearchId = 6
$urmSessionManagerProxy = New-WebServiceProxy -Uri http://fileholdtest4/fh/filehold/UserRoleManager/SessionManager.asmx?WSDL
$sessionId = $urmSessionManagerProxy.StartSession( $userId, $password, $clientType )
$lmDocumentFinderProxy = New-WebServiceProxy -Uri http://fileholdtest4/fh/filehold/LibraryManager/DocumentFinder.asmx?WSDL
$searchCriteria = $lmDocumentFinderProxy.LoadSmartFolder( $savedSearchId )
$prevGuid = [guid]::empty
$guid = [guid]::empty
$columns = $lmDocumentFinderProxy.GetDocumentsBySnapshot( $prevGuid, [ref]$guid, "SRT", $searchCriteria, $null, 0, 20 )
答案 0 :(得分:1)
问题是没有cookie传递给具有有效会话ID的DocumentFinder
服务。 StartSession
服务的SessionManager
方法是少数几个不需要cookie标识的有效会话的FileHold服务之一。这就是它没有cookie的原因。
会话ID提供了成功的StartSession
电话。您需要创建一个cookie容器并添加一个FHLSID
cookie并将其附加到DocumentFinder
代理。
以下代码说明了该示例的必要更改。
$userId = "sysadm"
$password = "12345"
$clientType = "CustomClient"
$savedSearchId = 6
$urmSessionManagerProxy = New-WebServiceProxy -Uri http://fileholdtest4/fh/filehold/UserRoleManager/SessionManager.asmx?WSDL
$sessionId = $urmSessionManagerProxy.StartSession( $userId, $password, $clientType )
$lmDocumentFinderProxy = New-WebServiceProxy -Uri http://fileholdtest4/fh/filehold/LibraryManager/DocumentFinder.asmx?WSDL
$uri = [System.Uri]$lmDocumentFinderProxy.Url
$cookie = New-Object System.Net.Cookie( "FHLSID", $sessionId, "/", $uri.Host )
$lmDocumentFinderProxy.CookieContainer = New-Object System.Net.CookieContainer
$lmDocumentFinderProxy.CookieContainer.Add( $cookie )
$searchCriteria = $lmDocumentFinderProxy.LoadSmartFolder( $savedSearchId )
$prevGuid = [guid]::empty
$guid = [guid]::empty
$columns = $lmDocumentFinderProxy.GetDocumentsBySnapshot( $prevGuid, [ref]$guid, "SRT", $searchCriteria, $null, 0, 20 )