I am running a C# 2010 windows application that calls a C# 2008 console application to make various calls to a web service. I am getting the following timeout error. I am wondering what part of the application I should look at to determine what is causing the timeout? Both applications are compiled in debug mode.
I am wondering if you can tell in the application what timeout parameter(s) need to be changed? What coding changes would I make to prevent the timeout errors from occuring?
Here is the error message:
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
2013-01-2416:40:03.3082|ERROR|Sample|************* Stack Trace *******************
2013-01-2416:40:03.3238|ERROR|Sample| at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object parentArgs, Object userArgs, ICompiledSubQuery subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo queryInfos, IObjectReaderFactory factory, Object userArguments, ICompiledSubQuery subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute[S](Expression expression)
at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)
As your stack trace mentions SQLClient in almost every line I would suspect it is your database query that is timing out, that will live in your WCF. You can change both the the connection timeout and/or the command timeout.
Never underestimate the power of human stupidity
I am wondering what part of the application I should look at to determine what is causing the timeout
If it is a large application and especially if it is a system (multiple applications like you're having) you might want to consider some serious logging. The timestamps in the log can immediately tell you where the culprit is.
I suggest thinking the logging mechanism over for a while before jumping in a quick and dirty solution. Good logging saved my day in numerous times.
What coding changes would I make to prevent the timeout errors from occuring?
What you need to do FIRST is determine what is being processed (presuming some SQL.)
The SECOND you need to determine what a reasonable time for that process to take - especially from the business side.
As an example it unreasonable to expect a user to wait for an hour for a web site to finish processing a request (where the web app is blocked until it is done.)
To "fix" a problem like this depends on the specifics of the problem but some or all of the following might be necessary but this is not a complete list.
- Tune the database/schema
- Adjust the SQL operation parameters or SQL itself.
- Rearch/design the interface to preclude such operations.
- Rearch/design the interface to create a batch processing system where a request is posted, some other process processes each request, and some time later a result is created, then the caller at some later time, may submit another (different) request to retrieve the result.
It is never easy!! We have a response file which has two types of decisions, ACCEPT and DECLINE with in the comma separated name/value pair. I am inserting this information in to the database and want only the decision ACCEPT. In cases in line contains DECLINE, I want to skip this current line and go to the next line.
using (StreamReader sr = new StreamReader(path))
while (sr.Peek() > -1)
string line = sr.ReadLine();
//extract the line contents
if( line.Contains("Accept")) // you can replace the condition with your choice
//Do Insert to database
Can you share the code how you invoke the SaveFileDialog, in my application its in front of the Winform UI.
It's the same SaveFileDialog with an additional button "Help" pressing the Help button should display a page on how to use this dialog. however when i tested in my PC pressing the Help buttons pops nothing.
Can you share the code how you invoke the SaveFileDialog
if (saveProjectDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
But I just found out it isn't just the SaveFileDialog doing it. Every MessageBox is doing the same. (No, nothing in the project is set to TopMost.)
I don't have anywhere to post screen captures at the moment, but the dialogs are different when ShowHelp is used or not. One is a huge Windows 7 Explorer-ish box, the other is a small dialog with the 5 icons down the left side for Recent Places, Desktop, Libraries, Computer, Network.
that's strange . hmmm.. lets try all other possibilities then.
1. Clean and Rebuild all your solution
2. create a new sample winformn with one button on it and to call the same method, if it works there something is modified in your code.
handled any other events?
Closing (prompts to save files)
Load (sets an MRU menu and lcoses the Splash form.
Thought it might be the Splash, but taking that out didn't fix it.
At this stage, I think I'll just go with a home-built prompt form instead of the MessageBox. At least that I can set to topmost...and it works. (It's also nice to have it look like the rest of the program instead of generic Windows box popping up.)
FYI, the Help button raises the HelpRequest event. It won't bring up the context sensitive help available via F1 or the ? button in the title bar, which probably comes courtesy of the Control.HelpRequested event.
This will happen if you're creating the message box in a different thread. Make sure that any event handlers on asynchronous processes (network communication, serial ports, BackgroundWorker, TPL or ThreadPool background tasks, etc) that refer to the UI get BeginInvoke'd.
You mentioned a splash screen ... that is often done on a separate thread to the main UI, so check you haven't ended up creating message boxes in that thread.
No threading in the app. Not even the Splash. No "weird" things involved except creating some bits and pieces on the fly.
I even tried setting the owner on the dialog, hoping it would pass it along and fix the problem, but to no avail.
Another odd thing the app does: when starting, it will appear on the screen wherever the mouse cursor happens to be, i.e. start it on monitor 1, then move the mouse over to monitor 2 to do something else and it will show up over there on monitor 2. (Extended display, dual monitors)
That depends on what you really need.
In my case I created a class (ActionRunner... and later a RunnableRunner). I use a Thread from my own pool of threads. It waits for a new Action (using a ManagedAutoResetEvent) and uses a Queue to effectively queue the Actions.
So, while there are items in the queue they are executed. When there are no more, an wait is done. My own ActionRunner is disposable, but that's to guarantee that I free the thread at the right moment. I consider it the best solution as it does not creates an unnecessary window and because the messages are real .Net actions (and not some number that must be processed by a switch).
Hi! How to end session after logging out? I am facing a problem that when clicking on logout session ends. After clicking on back button, previous page repeats again. This happens in all the pages of my project.
Here is the code for logout link..
Lobster Thermidor aux crevettes with a Mornay sauce, served in a Provençale manner with shallots and aubergines, garnished with truffle pate, brandy and a fried egg on top and Spam - Monty Python Spam Sketch
You are successfully killing the session there, so the previous page should no longer be active. (That is, nothing on it should work, because there will be no valid session for any action, and F5ing it should result in a failed authorisation and a return to the login page.)
What you need to do if you don't want browsers to show the page is make all your secure pages uncacheable. To do this in all browsers I think you need to set Pragma: no-cache, Cache-Control: none and also Expires: to a date in the past.
I have two links in my home page namely Register & Login. They are kept in a panel control and when I press enter from login popup it should be login. Till now every thing works.
When clicking on them(links) individually two modalpopups shown. When I press esc button they should be closed. But it is not working in a panel if I give BehaviorID to popup. Can any one help me?
Here is the asp.net code....
document.onkeyup = Escape;
var KeyID = event.keyCode;
if (KeyID == 27)
Don't. If you have a recordId, assume it exists and delete it - catch the exception if it did not. Adding checks like the one you proposed might say it exist, and still be deleted (by someone else) an instance later (unless it's an atomic operation, which I doubt).
if you delete it while it doesn't exist SQL will return something like: "0 rows deleted".
Deletefrom tableX where myconstraint='Myconstraint';
--> query returned in 10 ms: 0 rows deleted
If you do it in code you can get that by reading out the NrOfRowsAffected property when doing an ExecuteNonQuery statement. Same goes for Insert and Update queries eg.
as someone already replied, checking if it exists is inaccurate at best and doesn't add any functional advantage.
if you really, really must check it. Perform a select query perhaps with a count.
Select count(id) from tableX where myconstraint='Myconstraint'
This is your project to do. What's the point of us writing your code for you, as you learn nothing and you will be ill suited to becoming a professional developer. The trick is to research the algorithm yourself, and break it down little bit by little bit. A trick I sometimes use to help is to talk an algorithm through with someone - once you try and explain it, you see where the gaps are in your knowledge and it becomes easier to tackle those areas.
I was brought up to respect my elders. I don't respect many people nowadays.