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 744595
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 14, 20262026-05-14T08:59:46+00:00 2026-05-14T08:59:46+00:00

I have this situation…. Client-initiated SOAP 1.1 communication between one server and let’s say,

  • 0

I have this situation….
Client-initiated SOAP 1.1 communication between one server and let’s say, tens of thousands of clients. Clients are external, coming in through our firewall, authenticated by certificate, https, etc.. They can be anywhere, and usually have their own firewalls, NAT routers, etc… They’re truely external, not just remote corporate offices. They could be in a corporate/campus network, DSL/Cable, even Dialup.

Client uses Delphi (2005 + SOAP fixes from 2007), and the server is C#, but from an architecture/design standpoint, that shouldn’t matter.

Currently, clients push new data to the server and pull new data from the server on 15-minute polling loop. The server currently does not push data – the client hits the “messagecount” method, to see if there is new data to pull. If 0, it sleeps for another 15 min and checks again.

We’re trying to get that down to 7 seconds.

If this were an internal app, with one or just a few dozen clients, we’d write a cilent “listener” soap service, and would push data to it. But since they’re external, sit behind their own firewalls, and sometimes private networks behind NAT routers, this is not practical.

So we’re left with polling on a much quicker loop. 10K clients, each checking their messagecount every 10 seconds, is going to be 1000/sec messages that will mostly just waste bandwidth, server, firewall, and authenticator resources.

So I’m trying to design something better than what would amount to a self-inflicted DoS attack.

I don’t think it’s practical to have the server send soap messages to the client (push) as this would require too much configuration at the client end. But I think there are alternatives that I don’t know about. Such as:

1) Is there a way for the client to make a request for GetMessageCount() via Soap 1.1, and get the response, and then perhaps, “stay on the line” for perhaps 5-10 minutes to get additional responses in case new data arrives? i.e the server says “0”, then a minute later in response to some SQL trigger (the server is C# on Sql Server, btw), knows that this client is still “on the line” and sends the updated message count of “5”?

2) Is there some other protocol that we could use to “ping” the client, using information gathered from their last GetMessageCount() request?

3) I don’t even know. I guess I’m looking for some magic protocol where the client can send a GetMessageCount() request, which would include info for “oh by the way, in case the answer changes in the next hour, ping me at this address…”.

Also, I’m assuming that any of these “keep the line open” schemes would seriously impact the server sizing, as it would need to keep many thousands of connections open, simultaneously. That would likely impact the firewalls too, I think.

Is there anything out there like that? Or am I pretty much stuck with polling?

TIA,
Chris

UPDATE 4/30/2010:
Having demonstrated that having 7-second notification is neither easy nor cheap, especially without going outside of the corporate standard of HTTPS/SOAP/Firewalls, we’re probably going to pitch a two-phase solution. Phase1 will have the clients poll “on-demand” with the GetMessageCount being performed through SOAP, nothing fancy here. There will be a “refresh” button to pull new data (which is reasonable here, as the user will usually have reason to suspect that new data is ready, i.e. they just changed the fabric color in the online system, so they know to click REFRESH before viewing the shipping manifest on the desktop, and now they see the color in the description.) (This is NOT really a garment/fashion app, but you get the idea).
The notion of having the two aps always be in sync, with real-time updates pushed from the host, is still on the table, using the technologies discussed here. But I expect that it will be pushed off for another release, as we can deliver 85% of the functionality without having to do this. However, I hope that we get to do a Proof Of Concept, and can demonstrate that it’ll work. I’ll come back and post future updates. Thanks for everyone’s help on this.

  • 1 1 Answer
  • 1 View
  • 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-05-14T08:59:47+00:00Added an answer on May 14, 2026 at 8:59 am

    The two big parties on multi-tier development in Delphi are components4developers (with their kbmMW product described in the answer by Mark Robinson) and RemObjects with their product RemObjects SDK (they have a nice example that might be similar to what you want: Push notifications for iPhone).

    In your complex environment, multi-cast UDP might not cut it, but from a overhead perspective it is unbeatable.

    If a connection is open, it can be used in a bi-directional way (this is also used by .NET remoting and WCF), but has additional overhead.

    You will need to find a balance between keeping connections live (locking resources), and creating new connections (costing time and latency).

    –jeroen

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

Sidebar

Related Questions

I have this situation: application server running on example.com - this is where html
I have this situation: A method that expects a Type as one of its
I have this situation that I need to let users define decisions based on
I have this situation where I have a parent child relationship between two sets
I have this situation: { float foo[10]; for (int i = 0; i <
I have this situation where I want to display a list of Administration objects
We have this situation: Window Keyboard ^ ^ | / ApplicationWindow so class Window
I have this situation: interface MessageListener { void onMessageReceipt(Message message); } class MessageReceiver {
I have this situation: There are a login page with a login form (form
I have this situation where i have to start an activity from my mainActivity.

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.