We are a group of users of Blackbaud products and are not affiliated with Blackbaud. We'd love to have you join our community to help and be helped in getting the most from your Blackbaud software.
Register now to join us to get independent advice on your system, connect with 3rd party consultants to help you maximize your database and have a real alternative to the official Blackbaud website.
COMException 0x80010105 when retrieving participant event data
We have been having a growing problem with a custom events registration form that we use. This is a sporadic problem, happens about 1 in every 5 page loads
Here is the error…
System.Runtime.InteropServices.COMException (0x80010105): The server threw an exception. (Exception from HRESULT: 0x80010105 (RPC_E_SERVERFAULT)) at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) at System.Runtime.InteropServices.CustomMarshalers.EnumeratorViewOfEnumVariant.MoveNext() at USNAWebservices.MasterService.getParticipantEvents(Int32 REID)
And here is my code
<WebMethod()> _
Public Function getParticipantEvents(ByVal REID As Integer) As ParticipantData
Dim RE7 As REAPI = initAPI()
Dim oEventParticipants As Blackbaud.PIA.RE7.BBREAPI.CRecord
oEventParticipants = New Blackbaud.PIA.RE7.BBREAPI.CRecord
Dim oParticipant As Blackbaud.PIA.RE7.BBREAPI.CParticipant
Try
If RE7 Is Nothing Then
RE7 = initAPI()
End If
If Not RE7 Is Nothing Then
Dim i As Integer
Dim oData As New ParticipantData
With oEventParticipants
.Init(RE7.SessionContext)
.Load(REID)
Dim oParticipantInfo As New ArrayList
For Each oParticipant In .Participants
If CType(oParticipant.EventObject.Fields(ESpecialEventFields.SPECIAL_EVENT_fld_START_DATE), Date) > Date.Today Then
Dim results As New ParticipantInfo
results = getParticipantEventsInfo(oParticipant.Fields(EParticipantsFields.Participants_fld_ID))
oParticipantInfo.Add(results)
End If
Next
oData.Data = CType(oParticipantInfo.ToArray(GetType(ParticipantInfo)), ParticipantInfo())
End With
Return oData
Else
SendNotif("Unable to getParticipantEvents: API failed to initialize.")
End If
Catch ex As Exception
SendError("ERROR: webservices: getParticipantEvents " & Now(), "Garrett.Keating@usna.com", ex.ToString, True)
Finally
oEventParticipants.CloseDown()
End Try
End Function
I found this article (BB330194) in the KB that says I should check to see if re7 is nothing and then re-init. That’s doesn’t seem to help.
The above code is designed to check the logged in constits future events and then pass that back to the custom part so it can pre-populate info if they have already signed up for the current event
This code resides in a webservice
any suggestions would be greatly appreciated!
As a participant is a top level object you may need to close it down after each iteration of your for next loop. I know that this is counter intuitive as you did not initialise it but this is the case with top level objects that are also child objects to another top level objects. This is the same when you look at the gifts a constituent has.
As a participant is a top level object you may need to close it down after each iteration of your for next loop. I know that this is counter intuitive as you did not initialise it but this is the case with top level objects that are also child objects to another top level objects. This is the same when you look at the gifts a constituent has.
I am not sure if this is the cause of your problem but it will at least get rid of memory leaks and locking errors.
David
yup no clue why you'd shut down something you are still working with but what you are saying does make sense
we have been seeing a few instances of locks too
I'm going to hack at it and if it fixes it i'll be sure to let you know
and buy u a beer if you ever get into the Annapolis area
thanks!
no go on this one....
I added in
For Each oParticipant In .Participants
If CType(oParticipant.EventObject.Fields(ESpecialEventFields.SPECIAL_EVENT_fld_START_DATE), Date) > Date.Today Then
Dim results As New ParticipantInfo
results = getParticipantEventsInfo(oParticipant.Fields(EParticipantsFields.Participants_fld_ID))
oParticipantInfo.Add(results)
End If
oParticipant.CloseDown()
Next
same problem though....
thanks for the suggestion...i learned something