You are viewing limited content. For full access, please sign in.

Question

Question

.NET Application + SDK w/Windows AD = Error Message

SDK
asked on November 14, 2016 Show version history

We have a customer that is creating a .NET application and using the SDK and Windows AD user authentication with impersonation. The code they are running is below. When we run our browser and IIS on the same server, the application and interface to Laserfiche works.  We seem to be having issues authenticating from IIS to Laserfiche impersonating with the AD credentials from client’s browser. And here’s the error from our first TRY Statement:

 

Error System.InvalidOperationException: Operation is not in progress. at Laserfiche.RepositoryAccess.Search.GetSummaryStats(Flags flags) at Laserfiche.RepositoryAccess.Search.GetSummaryStats() at Vxxxxxx.VxxxxxxDocs.grdvVDocuments_PreRender(Object sender, EventArgs e)

Try
            Dim current = System.Security.Principal.WindowsIdentity.GetCurrent()
            Dim clientID As WindowsIdentity = DirectCast(HttpContext.Current.User.Identity, WindowsIdentity)
            Using wic = clientID.Impersonate()

                ' Log into Repository
                Dim myRepoReg As New RepositoryRegistration(lfinfo(0), lfinfo(1))
                Dim mySess As New Session()

               Try
                    mySess.LogIn(myRepoReg)
                Catch er As Exception
                    lblVetName.Text = "Login Error " + er.ToString
                    WebMsgBox.Show("Error " + er.ToString)
                End Try

                'Search for Vxxxxx Folder
                Dim mySearch As Search = New Search(mySess)
                mySearch.Command = "{LF:Name=""" & VetID & """, Type=""F""} & {LF:LOOKIN=""" & ConfigurationManager.AppSettings("LaserficheCaseFolder") & """, SUBFOLDERS=0}"
                Try
                    mySearch.Run()
                Catch er As Exception
                    lblVetName.Text = " Search Error " + er.ToString
                    WebMsgBox.Show("Error " + er.ToString)
                End Try

                'If Case Folder does not exist, create it
                Dim searchStatistics As SearchStatistics = mySearch.GetSummaryStats()
                If searchStatistics.FolderCount = 0 Then
                    Dim parentFolder As FolderInfo = Folder.GetFolderInfo("\\Vxxxxx Application\\Case Documents", mySess)
                    Dim newFolder As FolderInfo = New FolderInfo(mySess)
                    newFolder.Create(parentFolder, VetID, EntryNameOption.None)
                    newFolder.Unlock()
                End If

                mySearch.Close()

                'Search for files in Case Folder
                mySearch = New Search(mySess)
                mySearch.Command = "{LF:Name=""*"", Type=""DB""} & {LF:LOOKIN=""" + ConfigurationManager.AppSettings("LaserficheCaseFolder") + "\\" + VetID + """}"
                mySearch.Run()

                Dim settings As SearchListingSettings = New SearchListingSettings()
                Dim results As SearchResultListing = mySearch.GetResultListing(settings)

                If (results.RowCount > 0) Then

                    For Each elr As EntryListingRow In results
                        Dim newRow As DataRow = dt.NewRow()

                        Dim entryID As Integer = CInt(elr.GetDatumAsString(2))
                        newRow(0) = entryID

                        Dim myEntry As DocumentInfo = Document.GetDocumentInfo(entryID, mySess)
                        If myEntry.PageCount = 0 Then
                            myEntry.Delete()
                        Else
                            Using myEntry
                                newRow(1) = myEntry.Name

                                Dim entryValues As FieldValueCollection = myEntry.GetFieldValues()
                                newRow(2) = If(entryValues("Date Received"), DBNull.Value)
                                newRow(3) = If(entryValues("Document Type"), DBNull.Value)

                            End Using

                            dt.Rows.Add(newRow)
                        End If
                    Next
                End If

                If Not mySess Is Nothing Then
                    mySess.LogOut()
                    mySess.Close()
                    mySess.Discard()
                End If

                mySess = Nothing
            End Using

        Catch er As Exception
            lblVetName.Text = "Error " + er.ToString
            WebMsgBox.Show("Error " + er.ToString)
        End Try

 

0 0

Replies

replied on November 14, 2016

Sounds like you need to configure Kerberos to get impersonation working, see this post for more information. Also it looks like the function keeps going if mySess.LogIn throws an exception, which leads to the misleading 'not in progress' error message.

2 0
You are not allowed to follow up in this post.

Sign in to reply to this post.