Skip to main content

Debugging .Net Components called from Python, being run from a Batch Script, executed by the Windows Task Scheduler (Part 2)


In Part 1 We identified the problem i was recently asked to investigate and looked at getting some output from the batch script being run by the Windows Task Scheduler. As this was a production environment, there was little that could be modified and remote debugging wasn't an option.

In this part 2 post, we will continue to fault find touching on the Python and .Net components i mentioned previously and get to the point where the problem is fully identified and subsequently fixed without any changes made to the production code.

Having started to receive output, the next step was to make some sense of it.


The first thing i did was wrap the area of interest in the python script with a try catch



1) some generic exception 

try:

except:
    print "Exception: %s" % (sys.exc_info()[0])
 
 
Exception: Query Error
 
This was at least a start in that it looked database related at this point 
 
The next task was to identify the type of exception being thrown
A call was being made to a .Net component which looked to be instantiating a database repository.

2) .Net exception
import clr

except Exception, e:
    print type(e).__name__ 
    print type(e.clsException).__name__
    log.Write("exception - (generic) %s" % sys.exc_info()[0])
    print "exception - (generic) %s" % (sys.exc_info()[0])

3) 

fortunately an import at the top of the script gave me a hint as to the class library being used for the database repo. If this had not existed i would have turned to ilspy to take a peek at the assemblies in the application. It was the namesace i was most interested in
using, it din't take long to ilspy to find the class library the 
import the specific exception type from the .net assembly

from MCorp.Util.DB import DBException

except DBException, d:
    print type(d).__name__
    print type(d)
    print d.Message
    print d.StackTrace

this still reported a 'query error' so i suspected the 

4) inner exception

if d.InnerException != None:
     print d.InnerException.Message
     print d.InnerException.StackTrace

Login failed for user 'C5WebFrontendRWSTG'.


In order to verify what the correct 
microsoft data link

it uses to create a remote


try:

except:
 print "exception: %s" % (sys.e


PsExec is a light-weight telnet-replacement that lets you execute processes on other systems, complete with full interactivity for console applications, without having to manually install client software.

Last but not least and probably the less intrusive way of testing SQL connectivity is by use of Universal Data Link files (.UDL).  This method does not require the installation of a telnet client or has as many steps as the “System DSN” method and support for this method is built into every windows version.  You can delete the file afterwards to “clean-up” the system.  Right-click anywhere on your desktop and select “New”, then “Text Document”.

Popular posts from this blog

Simple Git branching strategy for release cycles

Coming up with a branching strategy that works well can be challenging when working with multiple developers and managing release cycles. A simple approach is presented here to manage release cycles, with a small to medium sized team of developers while still being able to react to production issues and fix bugs. The primary goal being to isolate work streams without impacting development progress. Background Git does not enforce any particular strategy when it comes to branching which is partly what makes it such a great and flexible repository. The problems start to arise though as you move into different stages of your development process. As an example, you have a release almost complete but don’t want to impede progress on the upcoming release cycle which is where the majority of effort is required. The Basic Approach The focus is around producing a release while still being able to react to hotfixes or production issues without impacting on going development of featu

Azure Devops - Pull Request Merge Conflicts

Before a Git pull request can complete, any conflicts with the target branch must be resolved. Out of the box, at the time of writing this article, Azure DevOps requires this to be resolved locally. Following best practices to not allow direct commits to our release/master branches further exasperates the problem as we need to effectively clone the branch or go with a rebase approach, both of which break the natural flow of resolving the conflicts as part of the pull request. With this extension, from the Microsoft DevLabs team via the Marketplace, you can resolve these conflicts online, as part of the pull request process, instead of being forced to break flow and resolve locally. Online Experience After adding the extension the new conflicts tab is visible which enables conflict resolution in the familiar side by side review page as shown below: Really nice extension, which should make resolving merge conflicts a much more straightforward part of the DevOps

Instrumentation with Semantic Logging Application Block from Microsoft Enterprise Library 6

Introduction Instrumentation, the process of auditing and logging in your applications, is a vital part of any enterprise solution. When you are developing applications with Service Level Agreements and specific Auditing requirements, logging is a big deal. Add in the complexity of the decoupled nature of the cloud with Service Orientated Architecture, piecing together a clear view of a business process from end to end can be a challenge. Microsoft has recently released the Semantic Logging Application Block ( SLAB ) to the enterprise library. This article will form the first part of a mini-series, detailing the benefits, pitfalls and examples of how to make use of it in your enterprise. Although new to the Enterprise Library, Semantic logging is not a new concept. It has been adopted for years under different names such as "structured logging", "strongly typed logging" and "schematised logging" to name a few. What is it? SLAB inherits event