473,397 Members | 2,068 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,397 software developers and data experts.

C# threading in ASP.Net

Is this safe? Any pitfalls? I have done threading in regular C# apps,
but haven't had a needs to do threading in ASP.Net, until now.

The issue I have ran into is this: Our corporate portal application
displays the logged in users 10 most recent emails from Exchange via
WebDav. The current code is in legacy VB6 and needs to be ported
*really* bad. Exchange 2003 has an issue where it only allows a max of
256 WebDav connections from one account. We used one "master" account
to authenticate against Exchange that could read any users mailbox. We
have 1,000's of employees and we exceeded the 256 connection limit. So
we added another "master" user with read access and then a third and we
round-robin between those.

The main issue is that we are getting some exchange bug where if
exchange goes down or has an issue during a request, the WebDav code
blocks until the portal timeout occurs and no one can get into the
portal. Employees need to always be able to get into the portal, even
if email is down. The portal is the gateway to most corporate apps for
all the non-technical users. The portal is PeopleSoft Portal. The way
PeopleSoft creates the home page with all the "pagelets" is that the
PeopleSoft Portal goes and makes the requests for the pages in the
background like a proxy server. It then puts all the pieces together
and runs the HTML through HtmlTidy to "fix" the broken HTML (remove
multiple <head><body> etc). Not the best method, but I cannot change
that. So if one of the "pagelets" takes too long, the whole stinking
PeopleSoft portal home page times out and prevents login.

I need to change it so that users can get into the portal even if there
is a timeout. I already ported the code to C# to do all the WebDav. I
get the emails back fine. I set the timeout property on the
HttpWebRequest object to 5 seconds. However, I need to be certain that
the method will always return in 5 seconds or less so I do not want to
only rely on the timeout property of the HttpWebRequest object.

I was going to write a wrapper function that creates a new thread. That
function in the thread does all the WebDav stuff. If that thread hasn't
returned in 5 seconds, the wrapper function just calls abort and returns
an empty XML response.

Will I run in to any threading issues with threading under ASP.Net? Is
the timeout property of the HttpWebRequest object *dependable*? Or
should I do the threading approach?

Thanks for any feedback,

Jim
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
There's no place like 127.0.0.1
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
JimD
Central FL, USA, Earth, Sol
May 30 '06 #1
4 1979
JimD,

I don't see why you would use another thread. If you are getting the
response, and you set the timeout for five seconds, an exception should be
thrown indicating that the timeout occured.

Also, you have asked if the timeout property of the HttpWebRequest class
is dependable. Is there any reaosn why you would think it isn't?

Hope this helps.

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"JimD" <Ji*@keeliegirl.dyndns.org> wrote in message
news:4I******************@tornado.tampabay.rr.com. ..
Is this safe? Any pitfalls? I have done threading in regular C# apps,
but haven't had a needs to do threading in ASP.Net, until now.

The issue I have ran into is this: Our corporate portal application
displays the logged in users 10 most recent emails from Exchange via
WebDav. The current code is in legacy VB6 and needs to be ported
*really* bad. Exchange 2003 has an issue where it only allows a max of
256 WebDav connections from one account. We used one "master" account
to authenticate against Exchange that could read any users mailbox. We
have 1,000's of employees and we exceeded the 256 connection limit. So
we added another "master" user with read access and then a third and we
round-robin between those.

The main issue is that we are getting some exchange bug where if
exchange goes down or has an issue during a request, the WebDav code
blocks until the portal timeout occurs and no one can get into the
portal. Employees need to always be able to get into the portal, even
if email is down. The portal is the gateway to most corporate apps for
all the non-technical users. The portal is PeopleSoft Portal. The way
PeopleSoft creates the home page with all the "pagelets" is that the
PeopleSoft Portal goes and makes the requests for the pages in the
background like a proxy server. It then puts all the pieces together
and runs the HTML through HtmlTidy to "fix" the broken HTML (remove
multiple <head><body> etc). Not the best method, but I cannot change
that. So if one of the "pagelets" takes too long, the whole stinking
PeopleSoft portal home page times out and prevents login.

I need to change it so that users can get into the portal even if there
is a timeout. I already ported the code to C# to do all the WebDav. I
get the emails back fine. I set the timeout property on the
HttpWebRequest object to 5 seconds. However, I need to be certain that
the method will always return in 5 seconds or less so I do not want to
only rely on the timeout property of the HttpWebRequest object.

I was going to write a wrapper function that creates a new thread. That
function in the thread does all the WebDav stuff. If that thread hasn't
returned in 5 seconds, the wrapper function just calls abort and returns
an empty XML response.

Will I run in to any threading issues with threading under ASP.Net? Is
the timeout property of the HttpWebRequest object *dependable*? Or
should I do the threading approach?

Thanks for any feedback,

Jim
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
There's no place like 127.0.0.1
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
JimD
Central FL, USA, Earth, Sol

May 30 '06 #2
Nicholas Paldino [.NET/C# MVP] wrote:
Also, you have asked if the timeout property of the HttpWebRequest class
is dependable. Is there any reaosn why you would think it isn't?
Well, we currently set the timeout to 10 seconds in the legacy VB6 COM
object that handles the WebDav communication. The COM object uses the
MSXML2.ServerXMLHTTP object. When Exchange locks the request, it is a
hard lock and the request never returns and 90 seconds later the whole
portal login times out because the email pagelet never finished since
the COM object never returned. The email pagelet and COM object are
both legacy VB6/ASP that I am happily moving to C#/.Net.

Our admins have worked with MS on this issue. I think we will get a
patch, some day....

However, until then we need our portal to be functional and not timeout
due to an Exchange WebDav issue.

Since the request made by the MSXML2.ServerXMLHTTP object gets locked
and doesn't honor the timeout value, I was thinking that the same thing
could happen with the HttpWebRequest object.
Hope this helps.


Thanks,

Jim
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
There's no place like 127.0.0.1
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
JimD
Central FL, USA, Earth, Sol
May 30 '06 #3
Jim,

Well, it depends on whether it is an issue with the Exchange server (or
rather, IIS which is hosting WebDAV for exchange) or the ServerXMLHTTP
object.

I believe that the timeout property of the HttpWebRequest object is
going to properly tell you if something timed out.

Of course, you could always ^try^ it rather easily, no? What happens
when you try?>

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"JimD" <Ji*@keeliegirl.dyndns.org> wrote in message
news:Kj*****************@tornado.tampabay.rr.com.. .
Nicholas Paldino [.NET/C# MVP] wrote:
Also, you have asked if the timeout property of the HttpWebRequest
class
is dependable. Is there any reaosn why you would think it isn't?


Well, we currently set the timeout to 10 seconds in the legacy VB6 COM
object that handles the WebDav communication. The COM object uses the
MSXML2.ServerXMLHTTP object. When Exchange locks the request, it is a
hard lock and the request never returns and 90 seconds later the whole
portal login times out because the email pagelet never finished since
the COM object never returned. The email pagelet and COM object are
both legacy VB6/ASP that I am happily moving to C#/.Net.

Our admins have worked with MS on this issue. I think we will get a
patch, some day....

However, until then we need our portal to be functional and not timeout
due to an Exchange WebDav issue.

Since the request made by the MSXML2.ServerXMLHTTP object gets locked
and doesn't honor the timeout value, I was thinking that the same thing
could happen with the HttpWebRequest object.
Hope this helps.


Thanks,

Jim
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
There's no place like 127.0.0.1
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
JimD
Central FL, USA, Earth, Sol

May 30 '06 #4
Nicholas Paldino [.NET/C# MVP] wrote:
Of course, you could always ^try^ it rather easily, no? What happens
when you try?>


I haven't tried it yet. I want to get as many test case scenarios
together as possible. The admins have to come in at night since they
cannot just pull the plug on our production Exchange. I don't want the
poor guys to have to keep coming in to try dozens of small changes.

The issue with Exchange only happens when Exchange goes down or has some
error. So to do a real test, the admins have to pull the plug on
exchange and see if any of the current requests timeout.

We have an isolated test environment. However, we do not have our
PeopleSoft portal in the test environment because it is a big complex
beast and people were having too many issues getting it to run. We also
switched to an Exchange cluster, which we do not have in the test
environment due to hardware costs.

I want to give the admins multiple tests so they can come back to me and
say test case A or B or C worked the best, use that one.

Thanks for the help Nicholas,

Jim
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
There's no place like 127.0.0.1
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
JimD
Central FL, USA, Earth, Sol
May 30 '06 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

65
by: Anthony_Barker | last post by:
I have been reading a book about the evolution of the Basic programming language. The author states that Basic - particularly Microsoft's version is full of compromises which crept in along the...
2
by: Egor Bolonev | last post by:
hi all my program terminates with error i dont know why it tells 'TypeError: run() takes exactly 1 argument (10 given)' =program==================== import os, os.path, threading, sys def...
77
by: Jon Skeet [C# MVP] | last post by:
Please excuse the cross-post - I'm pretty sure I've had interest in the article on all the groups this is posted to. I've finally managed to finish my article on multi-threading - at least for...
6
by: CK | last post by:
I have the following code in a windows service, when I start the windows service process1 and process2 work fine , but final process (3) doesnt get called. i stop and restart the windows service...
2
by: Vjay77 | last post by:
In this code: Private Sub downloadBtn_Click(ByVal sender As Object, ByVal e As System.EventArgs) If Not (Me.downloadUrlTextBox.Text = "") Then Me.outputGroupBox.Enabled = True...
11
by: Paul Sijben | last post by:
I am stumped by the following problem. I have a large multi-threaded server accepting communications on one UDP port (chosen for its supposed speed). I have been profiling the code and found...
17
by: OlafMeding | last post by:
Below are 2 files that isolate the problem. Note, both programs hang (stop responding) with hyper-threading turned on (a BIOS setting), but work as expected with hyper-threading turned off. ...
0
by: kingcrowbar.list | last post by:
Hello Everyone I have been playing a little with pyGTK and threading to come up with simple alert dialog which plays a sound in the background. The need for threading came when in the first...
7
by: Mike P | last post by:
I am trying to write my first program using threading..basically I am moving messages from an Outlook inbox and want to show the user where the process is up to without having to wait until it has...
126
by: Dann Corbit | last post by:
Rather than create a new way of doing things: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2497.html why not just pick up ACE into the existing standard:...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.