调用 FileHold 时出错 API DocumentFinder.LoadSmartFolder、"The request failed with HTTP status 401: Unauthorized."
Error calling FileHold API DocumentFinder.LoadSmartFolder, "The request failed with HTTP status 401: Unauthorized."
我正在尝试使用 Powershell 的点网 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 )
问题是没有使用有效会话 ID 传递给 DocumentFinder
服务的 cookie。 SessionManager
服务的 StartSession
方法是少数不需要由 cookie 标识的有效会话的 FileHold 服务之一。这就是它在没有 cookie 的情况下工作的原因。
成功的 StartSession
调用会提供会话 ID。您需要创建一个 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 )
我正在尝试使用 Powershell 的点网 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 )
问题是没有使用有效会话 ID 传递给 DocumentFinder
服务的 cookie。 SessionManager
服务的 StartSession
方法是少数不需要由 cookie 标识的有效会话的 FileHold 服务之一。这就是它在没有 cookie 的情况下工作的原因。
成功的 StartSession
调用会提供会话 ID。您需要创建一个 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 )