|
Look alright from me, but depending on how much code/how fast your callback runs the infinite loop could waste lots of CPU time. Might want to put a System.Threading.Thread.Sleep(0); at the end of the loop. This should free it's timeslice if the method runs fast as the exmaple you provided would.
I'm not too sure of this, but you "could" build it this way, without the loop.
Add a delegate to your class, remove the the loop from the start method, and point the delegate to the start method for your HTTP listener.
Add to your callback method an invoke call to the your start method delegate to start another instance. With this the current instance would end when it finished, yet it spawned another instance RIGHT after the 1st one was nabbed. The idea there is that every time something "grabs" a HTTP request a new listener is started before the request is served...
I don't know if this is better or not; I've never needed the HTTPListener, but it might be worth testing out. Then again it might be a load of crap/waste of time... The logic "seems there" but I can't be sure... It might even crap out your server if 10000's of request hit it (to many thread ect..) you could even add a few volatile variables to ensure that didn't happen....
|
|
|
|
|
Thanks Spacix,
I am going to start your another approach, start method with a delegate. Now I want to ask two more questions about your comments to my original code.
1.
SpacixOne wrote: Look alright from me
You mean the asynchronous function is implemented ok? Means while the main HTTP Listener thread listens coming request, the received request will be procedded by HttpCallback method at the same time -- which is true asynchronous model? (what I want to void and want to have a code review is because I am afraid I have a wrong implementation which makes a synchronous model, other than an asynchronous model)
2.
SpacixOne wrote: your callback runs the infinite loop
Why do you think the callback (I think you mean method HttpCallback method) runs the while loop? It should be the HTTPListener main thread which runs the loop?
3.
"and point the delegate to the start method for your HTTP listener"
My understand is you mean pass the callback method as delegate to start method of HTTP Listener class instance. But the start method has no parameter. How could I add a delegate as an input parameter to start method?
http://msdn2.microsoft.com/en-us/library/system.net.httplistener.start.aspx[^]
regards,
George
|
|
|
|
|
1) Your code does the following:
Starts a HTTP listener, waits for a request and processes it in the callback function. Returns, hits the loop and starts another listener. I guess you could call it asynchronous since the implementation is of HTTP Listener waits for a request, processes it, and starts another wait for request. It doesn't run in an asynchronous state though, neither would mine.
2)Your callback function controls how much CPU the infinite loop uses. If it is short with lots of request then it is allowing the infinite loop to check if true==true 1000's of times.
3) The delegate would be used in place of the start method to start your HTTP Listener. You could then call BegineInvoke() on it to restart the listen server.
|
|
|
|
|
Sorry, Spacix!
1.
Do you mean my code is not working in asynchronous mode and I have to processing request one by one? I think my code could have multiple threads running HttpCallback at the same time?
2.
SpacixOne wrote: 2)Your callback function controls how much CPU the infinite loop uses. If it is short with lots of request then it is allowing the infinite loop to check if true==true 1000's of times.
3) The delegate would be used in place of the start method to start your HTTP Listener. You could then call BegineInvoke() on it to restart the listen server.
I am confused your above solution after reading a couple of times. Could you show some pesudo code please?
regards,
George
|
|
|
|
|
hi
i write this code to define a CodeConstructor object, it has a parameter named "connectionString" :
CodeConstructor constructor1 = new CodeConstructor();<br />
constructor1.Attributes = MemberAttributes.Public; <br />
ctd.Members.Add(constructor1);<br />
<br />
string fieldName = this.ToLowerFirstChar("connectionString");<br />
CodeMemberField field = new CodeMemberField(typeof(string), fieldName);<br />
field.Attributes = MemberAttributes.Private;<br />
ctd.Members.Add(field);<br />
<br />
CodeParameterDeclarationExpression p1 = new CodeParameterDeclarationExpression(field.Type, fieldName);<br />
constructor1.Parameters.Add(p1);
now, in body of constructor1, i want to assign value of p1 to field object, i write this code, but i don't know how to assign p1.value to field object :
CodeAssignStatement fieldAssignment = new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), fieldName), new CodePrimitiveExpression(what do i write in this place ?));<br />
constructor1.Statements.Add(fieldAssignment);
thanks
|
|
|
|
|
This might be a simple question but I couldn't find a better solution t o resolve it..please help..
What I need is, I need to compare the domain name from my database, to check if it is match from what was being entered by user..
Example:
I have "abc.com" in my database, and when the user enter "hello@hi.abc.com", it need to return as True, meaning the subdomain "hi" will not be taken into consideration. When user enter "hello@hi.abc.com.org", it need to return as False.
I tried to split by "." after a substring of "@", but I couldnt match all of the cases and sometimes I will get the wrong answer..Is there any other better way instead of split, or ping that domain..
please help...thanks!
|
|
|
|
|
If there are a number of varying cases like that, maybe a regular expression would be better.
He who makes a beast out of himself gets rid of the pain of being a man
|
|
|
|
|
So you need to check whether the email address ends with "abc.com" or not, don't you?
Giorgi Dalakishvili
#region signature
my articles
#endregion
|
|
|
|
|
Need this function:
private bool checkForSubDomain(string emailAddr)
{
return (emailAddr.IndexOf('.', emailAddr.IndexOf('.'), 2) == emailAddr.LastIndexOf('.'));
}
Then you could do something like this if you need JUST the domain (without the TLD):
char [] findChar = (checkForSubDomain(emailAddr))?new char[] {'.'}:new char[] {'@'};
string emailDomain = emailAddr.Substring(emailAddr.IndexOf(findChar)+1, (emailAddr.Length - (emailAddr.IndexOf(findChar)+1)) - (emailAddr.Length - emailAddr.LastIndexOf('.')));
This is quick and sloppy but, I'm sure you could make it better
[EDITS]
Never mind this crap it wouldn't work with .co.uk and ect..
modified on Friday, April 25, 2008 9:36 AM
|
|
|
|
|
I guess you're trying to validate whether an email domain exists or not?
There's no real way to do this other than querying DNS for MX records to determine who handles mail for this domain. No regular expression will work. See section 5 of RFC 2821[^] for details.
DoEvents: Generating unexpected recursion since 1991
|
|
|
|
|
Actually mike is right...
What I posted won't work for .co.uk (DOH! American idealist shows in me again) so blah@somthing.co.uk would return "co" as the domain... There are infinite things like this :/ yea not possible (It' not a good thinking morning for me today)
|
|
|
|
|
Thanks guys for all of the related information, I am actually trying to figure out if my users are using free email and I have the free email list being stored in my database. I have tried some other related websites they seems like having the same bugs that i had..
my@hotmail.com - return True
my@my.hotmail.com - return False
hmm...any other suggestions? I appreciate the help from you guys!!!
|
|
|
|
|
Plz tell me how do I force the printer to print in grayscale mode from C#?
(Here I don't want the user to see the print setup dialog box)
Have a nice day
Faysal
|
|
|
|
|
For printing using C# code, you could read this[^].
Set the PageSettings.Color property to false to disable the color printing. The printout will be converted to grayscale.
SkyWalker
|
|
|
|
|
Hello everyone,
I did some research for File.Create API to find some option which could be used to create a new file, with exclusive owner mode (e.g. other process/thread can not delete/open/modify when current thread keep the file open). But can not find it out.
Could anyone let me know which option should I use or which API should I use?
thanks in advance,
George
|
|
|
|
|
If you create it using a FileStream then you can specify whether you get exclusive rights to it in the constructor. As long as you don't close the handle then other processes can't modify it.
|
|
|
|
|
Thanks Ed.Poore,
I have found it out. I think I need to FileStream.Close(), or else other thread/process can not use it?
regards,
George
|
|
|
|
|
|
Thanks Vasudevan,
I have found it out. I think I need to FileStream.Close(), or else other thread/process can not use it?
regards,
George
|
|
|
|
|
George_George wrote: I think I need to FileStream.Close(), or else other thread/process can not use it?
As long as the process holds sway on the file, other processes would be denied any access to it.
Vasudevan Deepak Kumar
Personal Homepage Tech Gossips
A pessimist sees only the dark side of the clouds, and mopes; a philosopher sees both sides, and shrugs; an optimist doesn't see the clouds at all - he's walking on them. --Leonard Louis Levinson
|
|
|
|
|
Thanks Vasudevan,
If a process holds a file handle in exclusive mode, and the process terminates without close the handle. Will kernel release the handle automatically, so that other process can access?
regards,
George
|
|
|
|
|
hellow frinds...
How to add a dateTime picker in a Datagrid cell.It wil e helpful if you are explaining with code
|
|
|
|
|
|
Hi!
Can any one help me, how to work with omni scanners. Do u have any sample code in C# for reading data from omniscanner with carriage return functionality...
Rashmi.M.K
|
|
|
|
|