Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9276995
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 18, 20262026-06-18T16:59:23+00:00 2026-06-18T16:59:23+00:00

Many years ago we wrote a multi-threaded-ish client/server reports generation system. It was based

  • 0

Many years ago we wrote a “multi-threaded-ish” client/server reports generation system.

It was based on VB6, SQL Server 7, Crystal Reports 7 and MSMQ on a mixture of NT4/Win2K/Win98

It had multiple EXEs running on the server (multi-threaded-ish), listening for round robin requests from client for reports to be generated and messages sent back to a tray-app on the client machine.

This all worked very nicely until MSMQ became a pain to support and we ditched it for single-threaded reporting on the client machine.

Now we have to re-create that system using modern tech.

So:

  • SQL Server 2005 onwards
  • Win Server 2003 onwards
  • .NET 3.5 (yes, I know, not that modern)
  • A “web front end” (irrelevant as all the IPC is server side, albeit on multiple servers)
  • Crystal Reports 10.5

Now, mostly, nothing there is difficult.

But after being burnt by MSMQ, we want something that can be deployed without a hundred different customer IT policies making it impossible to support.

My default fall back in this position is simple. Use SQL Server to store a list of jobs and the status of those jobs.

We all ready have a “ReportLog” table to store the jobs, I’d just have to add state fields to it, probably:

  • Running (bit, not null)
  • Complete (bit, not null)

It’s dumb, simple but will work.

My Dumb Solution

OK, so I build a windows service that has one thread watching the table, spawning thread pool jobs each time a new job appears. Each thread will return OK or Error on completing it’s single report and die.

Client scan the Log table watching for jobs to complete.

Advantages:

  1. It will always work, no IT department will get in our way
  2. It’s simple, everybody will understand it
  3. No extra technology or config. (MSMQ always needed installing and configuring)

Disadvantages:

  1. Client has no idea about the status of the service.
  2. It’s double passive, both client and server constantly polling a table
  3. If multiple servers are started up, they’ll start double rendering reports
  4. Only solution for (3) I can think of is some sort of exclusive write lock on the table (Yuck!)
  5. It feels like square peg in round hole, a workaround rather that a solution. IMO this isn’t what databases are for!

Question 1: If My Dumb Solution is a good idea, how can I prevent Disadvantage(4)?

Question 2: Seriously, isn’t there something better that MSMQ and SQL Server table polling? Something that has at least Advantage(1) and (3)

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-18T16:59:24+00:00Added an answer on June 18, 2026 at 4:59 pm

    If you’re already using SQL Server, then SQL Server Service Broker is your best replacement for MSMQ, especially for this scenario.

    Disadvantages #2, 3, 4 and 5 are resolved automatically, and #1 is resolvable with some work. You should be able to retain Advantages #1 and 3, but will probably lose #2.

    I have implemented several service-based solutions this way, and specifically you want to use the External Activation approach, also called Event-Based Activation.

    The documentation states:

    Messages for the same task are part of the same conversation. Within each conversation, Service Broker guarantees that an application receives each message exactly once, in the order in which the message was sent.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Many years ago I wrote a system for a customer using VB3 - or
HI: I've a Delphi 7 program that I wrote many years ago, but I've
I've had developed a website many years ago using .NET 1 and SQL 2000!
It's been awhile since I've wrote applications that dealt with money. Many years ago,
Many years ago I build a simple system for handling languageversioning of texts in
I've got an application here that I wrote many years ago that consists of
Many years ago, I was admonished to, whenever possible, release resources in reverse order
Background: Many years ago, I inherited a codebase that was using the Visual Studio
I can understand that many years ago there would be this kind of limitation,
I used a script many years ago that was basically and administrative backend where

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.