We are looking for MS.NET Technical Architects
We have two openings for Microsoft .NET Technical Architect. Please see the job details below
Job Description:
- Requires advanced technical knowledge and a thorough understanding of the customer needs
- Contributes to the development, delivery and maintenance of technology-based business solutions
- Ability to draft Proposals, Technical Architecture / document & presentations.
- Review during various stages of development life cycle
- Integration and System Testing
- Implementation and Deployment
- Ability to respond and accept production issues and coordinate with stake holders
- Strong Analytical abilities, Communication skills, Client Interfacing skills
Required IT Skills:
- Core .NET , XML/XSL, JQUERY, JSON, AJAX, ASP.NET, WCF, MS SQL Server, Oracle / My SQL, SQL Server Reporting Services, MS Visio, VSS/CVS/SVN
- Strong knowledge in Design Patterns and Principles, Enterprise Application Architecture, Project Estimations & Sizing, Resource Planning
- Preferable – Cloud exposure (Windows Azure or equivalent), Experience on open source technologies such as NHibernate, Spring.Net, RabbitMQ, Node.JS, Rhino Service Bus/NServiceBus, NOSQL i.e. MongoDB, Redis, RavenDB databases would be a plus , Experience in performance testing using custom [or] commercial tools & profilers, Continueous Integration tools like Cruise Control.Net / Team City, MS TFS would be a plus.
Job Location: Bangalore, may require to travel onsite (Primarily to Europe or USA) on need basis.
If you feel that your profile meet the skill sets then send your profile to senthilnathank@vmokshagroup.com
Some of our Highlights
We follow Object orientation approach and prefer to code against interface
We follow hybrid Agile PLM
Our MS.NET group is ALT.NET
We like SMART work than HARD work
We are passionate programmers
We are process oriented
We collect metrics and measure them often
We like to solve our customer problems through simple solutions
…and many more! come and join our family
Spring.Net web service exporter–No web service found error in production in IIS 7.0 Web Server
We use Spring.Net web service exporter to convert the POCO class into asp.net .asmx web service which we call from Jquery, this is our standard architectural practice we have been following successfully for almost 3 years.
Last week one of our client project completed and ready for deployment in the shared web hosting, as our standard we always go with Arvixe web hosting the reason being,
- They give full trust ASP.NET hosting which is critical for our architecture because we use heavily Spring.NET for Dependency Injection, AOP stuff like that which are internally based on Reflection which will not work in ASP.NET partial trust mode
- Cost of hosting is affordable
- Excellent online support
- 99.9% server up time. We never faced any issues for those clients we recommended Arvixe
- Easy to use web based control panel
- Multiple Domains, sub domains with maximum up to 6 web sites
- Website & sub domain temporary URL which will help to test the application even if we don’t have domain name pointed
After the project was successfully hosted in Arvixe, our web service didn’t get triggered when JQUERY calls it from client side instead we got the following error as shown in the screen shot
We thought that the problem may due to DI (IOC) issue but other objects (Data Access, Facade, AOP) which are invoked through DI (IOC) worked.
The actual problem is simple that the Arvixe web server is Windows 2008 where by default the ASP.NET configured in Integrated mode as shown in the screen shot
If we change the mode to “Classic” mode (Meant for IIS6.0) as shown in the screen shot below and the issue was resolved. We yet to resolve making it work in Integrated Mode (IIS 7.0)
Note:
We have used Spring.Net 1.3.1.x version
Vmoksha Technologies, Technology Consulting Group a.k.a TCG group Photo during 2011 Christmas celebrations
Bottom left to right: Bandita Choudhury, Ranjitha, Karthiga Baskaran, Paulomi Deb Roy.
Standing left to right row # 1: Asharani Mayaganahalli Shivanna, Arpana Chopra, SivaPrasad Jerripothula, Parandama Reddy Yarava, Senthilnathan Karuppaiah, Suraj Mustoor, Anubhav Srivastava, Princeton Paul Arockiaraj.
Standing left to right row # 2: Ankit Jaiswal, Suresh M, Nikhil Mishra, Ram Kapil Yerra, Srinivasa Raju, Karthik Devaraj, Narayanaswamy Gadamsetty, Chiranjeevi Cherukuri.
Surprise visit to KL, Malaysia on my way back from Monterey, CA, USA
After 60 days of busy IT consultation engagement with a premier Fresh Vegetables company headquartered in CA, USA, I headed back to Bangalore with excitement to join my family and kids. I had 9 hours of transit @ KL, Malaysia (LA-KL-Bangalore), the airline (MAS) provided pretty good accommodation @ their airport hotel Pan Pacific but I am bit worried how to pass those 8 hours (eat-sleep-rest [or] sight seeing….)
To my surprise, 7 travelers from the same flight (LA-KL-Chennai & Bangalore) of equal wavelength including mine met in the flight and decided to go out on transit visa to see PETRONAS tower and other important KL land marks and last but not the least having good Indian food.
The plan worked out pretty well and very economic, the experience was awesome i.e. New friendship (Doctor, IT professionals, IT entrepreneur, Management Student, MS student etc..)
Here go some clicks
From top left : supreeth, viswanath, subramanian, shailendra, Antony, senthilnathan (me) and Dr. Lakshmi
Generating reports with group level pagination (i.e. Page x of xx) using MS.Net Report viewer control in local processing mode
A common use case in (batch) report creation is generating reports with group pagination i.e. reset page number on group.
Example Scenario
Batch generating customer invoices. The total number of pages per invoice may be 1 to n depending on the number of line items in each invoice. Each invoice should get printed with page number in the top / bottom like page 1 of 2, page 2 of 2 etc. The next invoice should start in a new page with page number starting from 1 again like page 1 of 3, page 2 of 3 and page 3 of 3.
Unfortunately this is not supported out of the box in VS.NET2008 report viewer control and also doesn’t seem to be addressed in VS.NET2010 report viewer control. This article attempts to provide a workaround solution with fully running customizable source code along with detailed documentation. The idea for this solution is based on the discussion forum posts and blog posts by Lisa Nicholls and Chris Hays (please see the references section at the end of this article), on top their ideas, I implemented my own logic to overcome certain difficulties to provide a complete running solution with code and documentation which also covers the VS.NET development environment setup details to reference external .Net assemblies inside rdlc’s custom code which is again based on the wonderful detailed blog post by Mohamed Sharaf.
If you find this article is useful then all the credit goes to
- Nicholls
- Chris Hays
- Mohamed Sharaf
Without their ideas, code and references, I wouldn’t have completed this solutions. Hats of to the above gentlemen’s
Enough complaints and theory let us jump into the sample application walkthrough.
Requirement
We need to print work order reports in batch. Each work order report will have 1 [or] many pages with the following regions
Header – Show up in all the pages with work order number which is the grouping identifier and report generation date
Body
Static part (only show up in first page)
Dynamic (Running in to pages based on the size of the text). In this case it is just a text area. This can be list control
Footer – Show up in all the pages with group level pagination. For each group the page numbers will be printed as Page 1 of 5 (i.e. Page x of xx) where the xx determination is the challenging part that is what this article is addressing
Figure-01, The final work order report
Figure-02, The report regions
Solution Architecture
The above said requirement is achieved using the following
- VS.NET report viewer control using .rdlc files in local processing mode
- Custom embedded .net code used inside .rdlc for field level expression evaluation
- The above said (point # 2) custom code calls an utility class which is outside the reporting project’s namespace (separate class library)
Following sections will explain the
- Actual logic to determine the group pagination
- VS.NET setup while referencing external class libraries from embedded custom codes in .rdlc
Logic to determine the group pagination
There is no way we can determine the total number of pages in each group unless we preprocess the report. So in this case, we do two time report rendering, first one is pre-processing (a.k.a silent processing) and the next one is for actual rendering. Refer the source code which is well documented and also refer the links mentioned in the reference section.
Figure-03 , The high level flow
While during the pre-processing stage, we need to keep track of group and page number in each page run of the report and for that I used a shared dictionary variable resides in a utility class library with methods exposed for Adding in to the dictionary, consuming from the dictionary based on the key,. Clearing the dictionary etc… The utility class (the instance variable name is “oSSRHelper”) is called from the custom embedded code subroutines reside inside the .rdlc file. As shown in the figure-03. These subroutines are consumed as field level expressions (Refer Figure-11 ~ 16) and source code
Figure-04 – Custom .rdlc code
The custom code tab can be reached as shown in Figure-05
Figure-05, Custom code tab
If we use custom code inside .rdlc which references external assembly then there needs certain pre-requisites if we forget to satisfy those prerequisites then the VS.NET will not compile the source code and which is weird. We also need to satisfy other security pre-requisites otherwise the runtime will throw security error (related to Code Access Security, reflection etc.) which makes sense.
Satisfying VS.NET to compile the source code
The external assembly (in our case, ReportingServiceUtils.dll) which will be consumed from .rdlc should be kept in the VS.NET private assembly folder as shown below
Figure-06, VS.NET private assembly folder
Referencing external assemblies from .rdlc custom code
Follow the below screen shots to reference the external assembly from .rdlc reports in VS.NET designer
Figure-07, Referencing external assemblies from .rdlc
- Click the browse button and pick the external assembly. Once successfully done then it will show up in the references section as above
- Hand type the class name in the left side (fully qualified name)
- Hand type the instance variable name of your choice in the right side. Based on this the report will create a instance like this for you using reflection
</font></p> <p><font face="Arial Narrow">Dim oSSRHelper as ReportingServiceUtils. GroupTotalPage() = New ReportingServiceUtils.GroupTotalPage()</font></p> <p><font face="Arial Narrow">
If the above is done, you can access its methods and properties with out explicitly creating instance inside the custom .rdlc code like the one shown below (Note: No intellisense support inside the code tab and it supports only VBA kind of code)
Figure-08, accessing the external assemblies’ class (instance variable)
Overcoming runtime security exceptions
Since, the embedded code needs to be compiled at runtime through reflection;
- It may be required to sign your external assembly with strong naming
- Telling the runtime that the external assembly referenced is from trusted source by including this code snippet in the calling code (report viewer code behind) as shown in the figure-xx. This step is mandatory
Figure-09
3. Based on the permission i.e. trust level the code is executing, you may run into security issues, the runtime may compile the embedded code through reflection for which we need to hint the assembly that, allow partially trusted callers in the assemblyinfo.<vb/cs> file as shown in the Figure-10
Figure-10
Sample Application Source Code
I hosted the complete source code in Google code @ http://code.google.com/p/ms-dot-net-report-viewer-group-pagenation/downloads/list
It has two projects
- Sample Client application project, which hosts the reportviewer, .rdlc. It uses object data source (dtoWorkOrder.vb) and the actual data is sterilized (XMLSerialization) as collection of dtoWorkOrders.
- ReportingServiceUtils project, utility class library whose dll is consumed by the .rdlc embedded code
Follow the screen shots for the key fields in the .rdlc files which have field expressions. This helps to focus on the key fields in the report.
Figure-11, Master Report (parent)
Figure-12, Sub Report which is called from parent for each group
Figure-13, Field responsible for populating the group total page number into a Dictionary in each page run
Figure-14, Field responsible for printing the current page number in the group i.e. Page x of xx
Figure-15, Field responsible for printing the Total page number for a group i.e. Page x of x x (which is getting the value from the dictionary whose key is group name / identifier)
Figure-16, a hidden field which holds the group name/ identifier in all the pages and whose value is consumed in the header otherwise if we directly refer it from header, the group name will be null if the page is not the first page.
Source Codes:
Utility Class
Imports System.Collections.Generic ''' <summary> ''' VS.NET reportviewer helper class to identify and print group page numbers ''' NOTE: ''' This class currently supports for windows application. If you want to use it web application then introduce a logic ''' to uniquely identify the dictionaries because it is using shared / static varibales. This can be easily achieved by having ''' one more dictoinary i.e. Dictionary(Of String, Dictionary) whose key will be the logged on user name and the value will be the ''' actual dictionary hold the data. ''' </summary> ''' <remarks></remarks> Public Class GroupTotalPage ''' <summary> ''' Dictionary to hold the Group Name and the page number at which this group ends ''' </summary> ''' <remarks></remarks> Private Shared _GroupWithRunningMaxPageNumber As New Dictionary(Of String, String) ''' <summary> ''' Dictionary to hold the Group Name and the Total number of pages in that group ''' </summary> ''' <remarks></remarks> Private Shared _GroupWithTotalPageNumber As New Dictionary(Of String, String) ''' <summary> ''' Adds the group and the page number into the shared/static dictionary collection ''' The groupname / id being the key and pagenumber as value ''' If the groupname already exists then the GroupCurrentPageNumber value will be reset with the ''' surrent value. By doing so, always we will have the maximum value in each group ''' which will be the group's total number of page once the report is processed completely ''' This method is being called from the code in the rdlc file ''' </summary> ''' <param name="group"></param> ''' <param name="groupCurrentPageNumber"></param> ''' <remarks></remarks> Public Sub Add(ByVal group As String, ByVal groupCurrentPageNumber As String) If _GroupWithRunningMaxPageNumber.ContainsKey(group) Then _GroupWithRunningMaxPageNumber(group) = groupCurrentPageNumber Else _GroupWithRunningMaxPageNumber.Add(group, groupCurrentPageNumber) End If End Sub ''' <summary> ''' This Gives the Group and the Total number of pages within the group ''' Internally this function reads the data stored in the dictionary <see>_GroupAndMaxPageNumberWithInTheGroup</see> ''' and computes the result. ''' <see>_GroupAndMaxPageNumberWithInTheGroup</see> will have the data like below which is the input for this function ''' [group-A,04] ------- (1) ''' [group-B,09] ------- (2) ''' [group-C,10] ------- (3) ''' This function iterates the <see>_GroupAndMaxPageNumberWithInTheGroup</see> collection and computes the ''' total number of pages by substracting the page number with the previous page number like below ''' At Iteration-01 ''' Copys as it is from _GroupWithRunningMaxPageNumber into _GroupWithTotalPageNumber ''' The result will be like [group-A,04] ''' At Iteration-02 ''' It substracts (2) - (1) i.e. 09-04=05 ''' The result will be like ''' [group-A,04] ''' [group-B,05] ''' At Iteration-03 ''' It substracts (3) - (2) i.e. 10-09=01 ''' The result will be like ''' [group-A,04] ''' [group-B,05] ''' [group-C,01] ''' </summary> ''' <returns></returns> ''' <remarks></remarks> Public Function GetGroupWithTotalPageNumber() As Dictionary(Of String, String) If _GroupWithTotalPageNumber.Count = 0 Then Dim preKey As String = String.Empty For Each dic In _GroupWithRunningMaxPageNumber If String.IsNullOrEmpty(preKey) Then _GroupWithTotalPageNumber.Add(dic.Key, dic.Value) preKey = dic.Key Else _GroupWithTotalPageNumber.Add(dic.Key, (CInt(dic.Value) - CInt(_GroupWithRunningMaxPageNumber(preKey))).ToString()) preKey = dic.Key End If Next End If Return _GroupWithTotalPageNumber End Function ''' <summary> ''' This gives the Total number of pages for a given group(key) ''' This looks up at the dictionary <see>_GroupWithTotalPageNumber</see> and returns the value for the matching key ''' This is called from the code residing in the rdlc for each page to print the total number of pages ''' </summary> ''' <param name="key"></param> ''' <returns></returns> ''' <remarks></remarks> Public Function GetTotalPageNumber(ByVal key As String) As String If Not String.IsNullOrEmpty(key) AndAlso _GroupWithTotalPageNumber.ContainsKey(key) Then Return _GroupWithTotalPageNumber(key) Else Return String.Empty End If End Function ''' <summary> ''' Resets the shared variables. ''' </summary> ''' <remarks></remarks> Public Sub Clear() _GroupWithRunningMaxPageNumber.Clear() _GroupWithTotalPageNumber.Clear() End Sub End Class
Reference:
nook color ebook reader is awesome
I was looking for kindle wifi ebook reader to buy because kindle is leader in ebook gadget, light weight & on top of that affordable but unfortunately I could not get one due to out of stock during thanks giving time.
Due to its non availability, I happened to see barns & noble’s new nook color ebook reader and it is awesome. More than a ebook reader it a light weight affordable tablet.
the user experience is good and it mimics the Apple ipod & ipad. We can surf web, read electronic books in all popular formats, watch MP4 videos, listen to MP3 music’s. If you are planning to buy ebook reader, I would highly recommend to go for nook color. The OS is Android.
The downside of it is, at this time it is not supporting Adobe flash player but soon will be released…..
Solution to overcome the message “Report processing was cancelled“ while rendering report in VS.NET report viewer control
This message will come if we have both the SetDisplayMode() & RefreshReport() like below
ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout);
Me.ReportViewer1.RefreshReport();
The SetDisplayMode internally calls RefreshReport() and
at the same time as per the second statement above we also explicitly call the RefreshReport() hence the
previous call will gets cancelled hence the message “Report processing was cancelled”. The same applies if we call refreshReport() first and then SetDisplayMode()
To overcome this message, don’t call RefreshReport() when you have SetDisplayMode().
Informative and must know tips and details for Amazon Kindle e-Reader users
Just came across this kindle tips and tricks page which is really really good in terms of sharing unknown things about leveraging Amazon Kindle e-Reader to the maximum extent possible.
the link goes here Hack Your Kindle: 100+ Tips, Resources, and Tutorials to Read Better and Learn Faster
(rsRuntimeErrorInExpression) assembly does not allow partially trusted callers
I came across the above stated error while the report being rendered in Windows forms application with the results printed as “#Error”. The data source used is Object data source whose assembly is different than the report’s (rdlc) assembly.
The error output from the debug window is shown below.
The following points worth mentioning for this cause:
- The Object’s used to design the report (data source) is in a different assembly than the report’s (rdlc) assembly.
- parameters are used to print custom information in the report
- Custom code (proprietary vs.net report specific code hosted in the report itself which can be found in the report properties->code tab) was used in the report to overcome null values
- In the Security’s tab under the main winform’s start up project’s properties’ following are checked (refer the diagram)
- Enable the ClickOnce Security Settings
- This is a full trust application
From the error message it is clear that the issue is due to security but how to overcome? can we change the security settings as “This is a partial trust application” instead full trust?. We can but in our case I can’t change which will impact globally.
What we did was, we added the following code to allow partially trusted callers in the AssemblyInfo.vb for the project where our domain objects (Object data source) reside
In our reports, we used custom codes, expressions etc which needs to be compiled and executed at runtime through .Net reflection. Under Full trust, reflection will not work. Hope this helps!
VS.NET 2008 Report viewer control – Not so well documented issues and corresponding solutions
| The problem definition this article address is to overcome the data binding issues in case the data is nothing / null for complex domain objects with parent-child relationships. This problem occurs only while binding the child object properties whose value is nothing / null. In such scenario, the report viewer will display as #Error in spite having expressions such as IIF(IsNothing(<objParent.Child.Property>),<True part>, <False part>) |
VS.Net Report viewer control is pretty good to meet the reporting requirements in any project. It comes with VS.NET as a server control hence the learning curve in creating the reports also straight forward.
the http://www.gotreportviewer.com/ hosts plenty of samples and FAQs for different reporting requirements which are sufficient for most of the time.
In my recent project, we had a requirement to bind custom domain objects i.e. object data source to report control. The object relationship is multi level i.e. parent-child relationship as shown in the class model below
The report in the designer mode is shown in the diagram
In the above example marked in red color, I am binding the “d_Number” property of the “p_Uar” object which is a child object to the “p_UarTask”. In a best case scenario, the report is rendered correctly with the value but in case the child object is Nothing [or] Null in C# the value rendered “#Error” as shown in the diagram below
In order to overcome null/nothing, implemented the following expression
The result of this implementation also rendered in #Error. I tried the same expression for the parent object and it worked but the same solution didn’t for any child objects.
After a hard time found out the solution which is creating and consuming custom code in the report itself (we can create macro like codes within the report and which gets compiled and executed using reflection by the VS.NET reporting API). The sample code Which I created and consumed from the report are shown below
This was very critical for us because we always deal with custom domain objects with complex relationships. Such kind of issues / known problems not given in the samples / FAQ’s which at least I could not found out easily hence posted my experience and solutions for others. I hope this helps.

My LinkedIn Profile