Troubleshooting
Queue Service: Could Not Load File or Assembly
A QBO client recently encountered the following error: Error in ProcessTimerElapsed; Error Processing Managers; QueueManager.Process; QueueManager.Initialize; Error initializing modules in QueueManager QBO; Unable to initialize configuration for qbo/ObjectType; Unable to initialize configuration for qbo/Abstract; Unable to initialize configuration for qbo/ConfigurationEntry; Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) The root cause was an earlier version of Newtonsoft.Json was in the root folder of the website. See the SO answer. |
Importing Excel Data: Duplicates
Some Excel spreadsheets can result in duplicate rows being processed. ![]() To avoid this, save the spreadsheet as a .CSV file, getting rid of all the 'extra' Excel features. Once done, you can import the .CSV file, or convert it back to Excel (.XLS or .XLSX) and import the 'clean' version. Unfortunately, Quandis does not control the Microsoft ACE drivers, so we cannot 'fix' the issue on our side! |
Google Maps API Quota Exceeded
ORT was using an old version of the Google Maps Javascript API, including this tag: <script type="text/javascript" src=" https://maps-api-ssl.google.com/maps/api/js?v=3&sensor=false&channel=ort.quandis.com ">//</script> This presented two issues:
To fix this issue, we used: <script type="text/javascript" src=" https://maps.googleapis.com/maps/api/js?key=AIzaSyC55qJXl_7lMt2owCGbWay3mLBwDaDyq9E&callback=initMap ">//</script> In order to create the API Key (in the key parameter above), we:
All QBO3 systems should migrate the Google Maps Javascript API calls to leverage this pattern. |
AutoBind and Statement Inheritance
The ADR system encountered an unusual use case where Organization/AutoBind did not work as expected. The root cause is that statements inherit the parameters of statements defined in their base class. In this instance, Organization inherits from Contact, and both had an AutoBind statement defined:
The unexpected behavior was introduced as follows:
The fix for this scenario is to create an alternative AutoBind statement, such as Organization/AutoBindByOrganization with just Organization as a parameter. SetProperties will evaluate all AutoBind* statements, so both of the following calls would trigger an AutoBind :
|
Freddie Mac LMWS Error Report Procedures
Error reports are received from LMWS in response to our twice daily (three times on the first Tuesday of each month), when data conditions exist on loans that prevent the import process from importing them. These responses are received via email to adr.support@quandis.com , and come from lmwmgr@he2unxpv228.fhlmc.com. The subject of the email is "Error Report for Foreclosure/Bankruptcy Loan Level Attorney Data" The following two sections describe the data conditions, and the process on how to correct them and/or notify the appropriate party(ies) of the concern. Invalid Key/Loan Combination Procedure Key IDs are sent with each case, and are unique identifiers to LMWS, which allow the ADR system to send updates on existing cases. The "Invalid Key/Loan Com" error means the Key ID we are attempting to submit was used to identify a previous case associated with a different Freddie Mac loan number. An example of this is: F001351000 1281 991208293 723147115 Invalid Key/Loan Com. The Key ID associated with the new loan/case will need to be reset in the ADR system. You will be using the "LMWSKeyIDFix.xlsx" spreadsheet for this, which is attached to this Blog Post.
Invalid Loan Number Procedure LMWS rejects any cases that are associated with "Invalid Loans" There are two definitions of "Invalid Loans", for the purpose of this procedure:
Follow the steps below for each Foreclosure case that is identified as "Invalid Loan Number" in the "inval_loans_lenstar.doc" attachment. Foreclosure cases are identified with the letter "F" at the beginning of the row within the attachment. Example: F003007910 4111
790944103 NULL Invalid Loan Number. All items with other leading letters can be skipped.
|
IIS 7.5 App Pool Stopping: Rewrite.dll broken
Upgrading to Windows 8.1, I found that IIS stopped working; the application pool would be stopped under rapid fail protection. The Windows logs indicated: The Module DLL C:\WINDOWS\system32\inetsrv\rewrite.dll failed to load. The data is the error. Googling this phrase led to a technet solution:
Simple solution; long time to find it. |
Debugging: Read the Stack Trace
Debugging Quandis Business ObjectsTroubleshooting a QBO installation requires knowledge of five key debugging tools:
Debugging the BrowserQBO makes use of over 40,000 lines of javascript code (prior to minification), and about 10,000 lines of css code. The good news is that only about 1/3 of all that code is 'QBO' code; the remainder is off-the-shelf stuff that rarely contributes to problems, but you still need to be able to read through it. You are welcome to use any browser platform to debug. If you feel you wish to debug in IE, please spend 15 minutes debugging in IE 9 or earlier using their debugging tool, then spend 3 minutes debugging in Chrome, and you will reach the same conclusion that Microsoft's internal development teams reached: don't waste your time in IE. Firebug is a perfectly acceptable alternative to webkit's debugger. Some tips from the Quandis team with respect to the webkit debugger:
Debugging the Network![]()
Fiddler's Composer window allows you to simulate HTTP GETs and POSTs to a website. To effectively use this with QBO, do the following: ![]()
You can review a more robust tutorial on Fiddler's site. Debugging the ServerAll QBO developers should have a local QBO installation running under IIS on their development machine. It's fine to have this site using a connection string to a dev or uat database, but you need to have the server-side (C#) code running locally to effectively debug. If you encounter a server-side error, you need to know where to start debugging. Determine this from the stack trace found in the server-side error logs. In the stack trace below, note the following:
---------------------------------------- Timestamp: 3/4/2013 11:51:28 PM Activity: 00000000-0000-0000-0000-000000000000 Message: HandlingInstanceID: ea85ac7a-9feb-4197-87ee-49549498e9b4 An exception of type 'qbo.Exception.GeneralException' occurred and was caught. ------------------------------------------------------------------------------ 03/04/2013 18:51:28 Type : qbo.Exception.GeneralException, qbo.Exception, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null Message : General Exception Source : Help link : Manager : Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionManagerImpl Data : System.Collections.ListDictionaryInternal TargetSite : HResult : -2146233088 ThrowException : True Stack Trace : The stack trace is unavailable. Additional Info: MachineName : MINBAR TimeStamp : 3/4/2013 11:51:28 PM FullName : Microsoft.Practices.EnterpriseLibrary.ExceptionHandling, Version=5.0.414.0, Culture=neutral, PublicKeyToken=null AppDomainName : /LM/W3SVC/1/ROOT-1-130069145369323941 ThreadIdentity : admin@quandis.com WindowsIdentity : IIS APPPOOL\DefaultAppPool Inner Exception --------------- Type : qbo.Exception.GeneralException, qbo.Exception, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null Message : Error attempting to read the path '/Templates/Mortgage/CopyTest/CopyTest.Edit.xslt' in file object repository 'Template'. Source : qbo.Attachment Help link : Manager : Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.ExceptionManagerImpl Data : System.Collections.ListDictionaryInternal TargetSite : qbo.Attachment.AttachmentInfo Read(System.IO.Stream, System.String) HResult : -2146233088 ThrowException : True Stack Trace : at qbo.Attachment.FileObjects.LocalFile.Read(Stream stream, String relativePath) in C:\Source\Trunk\qbo.3\qbo.Core\Application Tier\qbo.Attachment\FileObjects\LocalFile.cs:line 60 at qbo.Attachment.AttachmentObject.Read(Stream streamToWriteTo) in C:\Source\Trunk\qbo.3\qbo.Core\Application Tier\qbo.Attachment\Attachment.cs:line 435 at qbo.Attachment.AttachmentObject.ReadMemory() in C:\Source\Trunk\qbo.3\qbo.Core\Application Tier\qbo.Attachment\Attachment.cs:line 446 at qbo.Attachment.AttachmentObject.ReadXsl(XsltSettings settings) in C:\Source\Trunk\qbo.3\qbo.Core\Application Tier\qbo.Attachment\Attachment.cs:line 511 at qbo.Attachment.AttachmentObject.ReadXsl() in C:\Source\Trunk\qbo.3\qbo.Core\Application Tier\qbo.Attachment\Attachment.cs:line 500 at qbo.Decision.ImportFormTemplateObject.get_EditTransform() in C:\Source\Trunk\qbo.3\qbo.Core\Application Tier\qbo.Decision\ImportFormTemplate.cs:line 248 at qbo.DecisionWeb.ImportForm.RenderEdit(HttpContext context) in C:\Source\Trunk\qbo.3\qbo.Core\Web Tier\qbo.DecisionWeb\Decision\ImportForm.ashx.cs:line 152 at qbo.DecisionWeb.ImportForm.ProcessRequest(HttpContext context) in C:\Source\Trunk\qbo.3\qbo.Core\Web Tier\qbo.DecisionWeb\Decision\ImportForm.ashx.cs:line 60 Inner Exception --------------- Type : System.IO.DirectoryNotFoundException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Message : Could not find a part of the path 'C:\inetpub\local.quandis.net\Templates\Mortgage\CopyTest\CopyTest.Edit.xslt'. Source : mscorlib Help link : Data : System.Collections.ListDictionaryInternal TargetSite : Void WinIOError(Int32, System.String) HResult : -2147024893 Stack Trace : at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access) at qbo.Attachment.FileObjects.LocalFile.Read(Stream stream, String relativePath) in C:\Source\Trunk\qbo.3\qbo.Core\Application Tier\qbo.Attachment\FileObjects\LocalFile.cs:line 39 Category: General Priority: 0 EventId: 100 Severity: Error Title:Enterprise Library Exception Handling Machine: MINBAR App Domain: /LM/W3SVC/1/ROOT-1-130069145369323941 ProcessId: 5584 Process Name: c:\windows\system32\inetsrv\w3wp.exe Thread Name: Win32 ThreadId:7172 Extended Properties: ---------------------------------------- Debugging the DatabaseDebugging the database should be used when other technique fail. Profiling a server, particularly a PROD server, is 'expensive' in that the act of profiling can degrade the performance of the db all by itself. Thus, you should coordinate with a DBA or QBO architect if you need to profile a database for your debugging efforts. When profiling QBO3, consider:
Log FilesAll QBO errors are logged to the web server. QBO 3 logging uses the Microsoft Enterprise Library Logging sinks, including a rolling log file that is renamed each day. Some tips include:
|
Chrome Frame Configuration
BackgroundTo ensure a QBO website works with Chrome Frame, two key things must happen:
IIS 7+ Server ConfigurationEnsure web.config includes the following: <system.webServer> ... <!-- Use Chrome, if available --> <httpProtocol> <customHeaders> <add name="X-UA-Compatible" value="chrome=1" /> </customHeaders> </httpProtocol> </system.webServer> IIS 6 ConfigurationFrom IIS Manager:
IE ConfigurationNormally, all one needs to do is download and install Chrome Frame. If this does not work, troubleshooting steps are:
|
IIS and Windows Authentication
When configuring IIS for windows authentication, you may encounter an "Access Denied" error when logging in with your local machine account. This is because IIS is configured to prevent certain types of hacking attempts using this method. You can fix the problem by modifying the registry. |
Access Denied: What account is IIS Using?
IIS 6 typically uses a standard Windows account called 'Network Service' to execute ASP.NET code. This implies that if you want QBO configuration pages to save changes to the file system, the Network Service account needs write permissions to the subject files.
|