Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. Error stop Http Listener

Error stop Http Listener

Scheduled Pinned Locked Moved C#
helpquestioncsharpsysadmintutorial
33 Posts 5 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G GDavy

    ;) I know which thread you mean. The thread he creates uses the StartListening Function. In that function the BeginGetContext call is made, and this will throw the InvalidOperationException when the _Server object is stopped. So the thread he creates really does exit when the _Server stops. He will just need to catch the InvalidOperationException and evaluate that it is expected behaviour.

    N Offline
    N Offline
    N a v a n e e t h
    wrote on last edited by
    #15

    GDavy wrote:

    In that function the BeginGetContext call is made, and this will throw the InvalidOperationException when the _Server object is stopped. So the thread he creates really does exit when the _Server stops. He will just need to catch the InvalidOperationException

    I know. I was suggesting him to stop that thread when HTTPListener stops, so it won't call again BeginGetContext(). Will that be a good method than catching exception, and thread getting aborted automatically ?

    All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

    G 1 Reply Last reply
    0
    • G George_George

      Hello everyone, Here is my simple application code for a Windows Service application. The question is, when stop the service, there is always, // [System.InvalidOperationException] = {"Please call the Start() method before calling this method."} Does anyone have any ideas why there is such issue and how to fix?

      using System;
      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Data;
      using System.Diagnostics;
      using System.ServiceProcess;
      using System.Text;
      using System.Net;
      using System.Threading;

      namespace TestServiceStop1
      {
      public partial class Service1 : ServiceBase
      {
      private Thread _tHttpThread;
      private TestHttpServer _server;

          public Service1()
          {
              InitializeComponent();
          }
      
          protected override void OnStart(string\[\] args)
          {
              \_server = new TestHttpServer(this);
      
              \_tHttpThread = new Thread(\_server.StartListen);
      
              \_tHttpThread.Start();
          }
      
          protected override void OnStop()
          {
              // stop HTTP server
              \_server.Stop(false);
          }
      }
      
      public class TestHttpServer
      {
          // listening HTTP port
          private int \_Port = 0;
      
          // internal wrapped HTTP listener
          private HttpListener \_Server = new HttpListener();
      
          private Service1 \_manager;
      
          public TestHttpServer (Service1 manager)
          {
              \_manager = manager;
          }
      
          public int ListenPort
          {
              get
              {
                  return \_Port;
              }
              set
              {
                  \_Port = value;
              }
          }
      
          public void StartListen()
          {
              try
              {
                  IAsyncResult result;
                  \_Server.Prefixes.Add(String.Format("http://+:{0}/", 9099));
                  \_Server.Start();
                  while (true)
                  {
                      result = \_Server.BeginGetContext(new AsyncCallback(this.HttpCallback), \_Server);
                      result.AsyncWaitHandle.WaitOne();
                  }
              }
              // any exceptions are not expected
              // catch InvalidOperationException during service stop
              // \[System.InvalidOperationException\] = {"Please call the Start() method before calling this method."}
              catch (Exception ex)
              {
                  throw ex;
              }
          }
      
      Z Offline
      Z Offline
      Zoltan Balazs
      wrote on last edited by
      #16

      George_George wrote:

      catch (Exception ex) { throw ex; }

      You're not doing anything with the exception and then you throw a modified exception (without the original stack trace). If you want to re-throw the original exception use

      throw;

      Simple.

      Work @ Network integrated solutions | Flickr | A practical use of the MVC pattern

      G 1 Reply Last reply
      0
      • Z Zoltan Balazs

        George_George wrote:

        catch (Exception ex) { throw ex; }

        You're not doing anything with the exception and then you throw a modified exception (without the original stack trace). If you want to re-throw the original exception use

        throw;

        Simple.

        Work @ Network integrated solutions | Flickr | A practical use of the MVC pattern

        G Offline
        G Offline
        George_George
        wrote on last edited by
        #17

        Thanks Zoltan, Good to learn from you. Any comments to? http://www.codeproject.com/script/Forums/View.aspx?fid=1649&msg=2580309[^] regards, George

        1 Reply Last reply
        0
        • N N a v a n e e t h

          GDavy wrote:

          In that function the BeginGetContext call is made, and this will throw the InvalidOperationException when the _Server object is stopped. So the thread he creates really does exit when the _Server stops. He will just need to catch the InvalidOperationException

          I know. I was suggesting him to stop that thread when HTTPListener stops, so it won't call again BeginGetContext(). Will that be a good method than catching exception, and thread getting aborted automatically ?

          All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

          G Offline
          G Offline
          George_George
          wrote on last edited by
          #18

          Thanks N a v a n e e t h, 1. Sounds good. Could you show the code please? I want to learn from you but feel do not know how to code. :-) 2. Any comments to? http://www.codeproject.com/script/Forums/View.aspx?fid=1649&msg=2580309[^] regards, George

          N 1 Reply Last reply
          0
          • G George_George

            Thanks N a v a n e e t h, 1. Sounds good. Could you show the code please? I want to learn from you but feel do not know how to code. :-) 2. Any comments to? http://www.codeproject.com/script/Forums/View.aspx?fid=1649&msg=2580309[^] regards, George

            N Offline
            N Offline
            N a v a n e e t h
            wrote on last edited by
            #19

            1 -

            volatile bool continue = true;
            public void StartListen()
            {
            try
            {
            IAsyncResult result;
            _Server.Prefixes.Add(String.Format("http://+:{0}/", 9099));
            _Server.Start();
            while (continue)
            {
            result = _Server.BeginGetContext(new AsyncCallback(this.HttpCallback), _Server);
            result.AsyncWaitHandle.WaitOne();
            }
            }
            // any exceptions are not expected
            // catch InvalidOperationException during service stop
            // [System.InvalidOperationException] = {"Please call the Start() method before calling this method."}
            catch (Exception ex)
            {
            throw ex;
            }
            }

                public void Stop(bool isTerminate)
                {
                    **continue = false;**
                    \_Server.Stop();
                }
            

            2 - It looks fine.

            All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

            G 1 Reply Last reply
            0
            • N N a v a n e e t h

              1 -

              volatile bool continue = true;
              public void StartListen()
              {
              try
              {
              IAsyncResult result;
              _Server.Prefixes.Add(String.Format("http://+:{0}/", 9099));
              _Server.Start();
              while (continue)
              {
              result = _Server.BeginGetContext(new AsyncCallback(this.HttpCallback), _Server);
              result.AsyncWaitHandle.WaitOne();
              }
              }
              // any exceptions are not expected
              // catch InvalidOperationException during service stop
              // [System.InvalidOperationException] = {"Please call the Start() method before calling this method."}
              catch (Exception ex)
              {
              throw ex;
              }
              }

                  public void Stop(bool isTerminate)
                  {
                      **continue = false;**
                      \_Server.Stop();
                  }
              

              2 - It looks fine.

              All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

              G Offline
              G Offline
              George_George
              wrote on last edited by
              #20

              Thanks N a v a n e e t h, I think your code has an issue when we are executing result = _Server.BeginGetContext(new AsyncCallback(this.HttpCallback), _Server) while at the same time, Stop is called. :-) In this situation, there is no chance to check continue status variable. Any comments? regards, George

              N 2 Replies Last reply
              0
              • G George_George

                Thanks N a v a n e e t h, I think your code has an issue when we are executing result = _Server.BeginGetContext(new AsyncCallback(this.HttpCallback), _Server) while at the same time, Stop is called. :-) In this situation, there is no chance to check continue status variable. Any comments? regards, George

                N Offline
                N Offline
                N a v a n e e t h
                wrote on last edited by
                #21

                Yes you are correct. I wrote it to explain the things, and don't consider it as a final code. Try with some synchronization mechanism, or the other method which GDavy suggested, it's looking good.

                All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

                G 1 Reply Last reply
                0
                • N N a v a n e e t h

                  Yes you are correct. I wrote it to explain the things, and don't consider it as a final code. Try with some synchronization mechanism, or the other method which GDavy suggested, it's looking good.

                  All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

                  G Offline
                  G Offline
                  George_George
                  wrote on last edited by
                  #22

                  Thanks N a v a n e e t h, Using synchronization in service stop callback method OnStop is dangerous, right? :-) If I do not understand your points correctly, please feel free to correct me and post your code. regards, George

                  1 Reply Last reply
                  0
                  • G George_George

                    Thanks N a v a n e e t h, I think your code has an issue when we are executing result = _Server.BeginGetContext(new AsyncCallback(this.HttpCallback), _Server) while at the same time, Stop is called. :-) In this situation, there is no chance to check continue status variable. Any comments? regards, George

                    N Offline
                    N Offline
                    N a v a n e e t h
                    wrote on last edited by
                    #23

                    George_George wrote:

                    result = _Server.BeginGetContext(new AsyncCallback(this.HttpCallback), _Server) while at the same time, Stop is called. [Smile]

                    George - I was trying to solve the quoted issue. When I looked into your code carefully, I am confused. Your HTTPServer can connect only one client at a time ?

                    All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

                    G 1 Reply Last reply
                    0
                    • N N a v a n e e t h

                      George_George wrote:

                      result = _Server.BeginGetContext(new AsyncCallback(this.HttpCallback), _Server) while at the same time, Stop is called. [Smile]

                      George - I was trying to solve the quoted issue. When I looked into your code carefully, I am confused. Your HTTPServer can connect only one client at a time ?

                      All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

                      G Offline
                      G Offline
                      George_George
                      wrote on last edited by
                      #24

                      Thanks N a v a n e e t h, 1. I have checked multiple clients can enter HandleRequest when we call EndGetContext. Please feel free to correct me if I am wrong. 2. If you have any ideas to improve my code to handle clients' request more efficiently? regards, George

                      N 1 Reply Last reply
                      0
                      • G George_George

                        Thanks N a v a n e e t h, 1. I have checked multiple clients can enter HandleRequest when we call EndGetContext. Please feel free to correct me if I am wrong. 2. If you have any ideas to improve my code to handle clients' request more efficiently? regards, George

                        N Offline
                        N Offline
                        N a v a n e e t h
                        wrote on last edited by
                        #25

                        Ok- Take a look at your StartListen() method (unwanted lines trimmed).

                            public void StartListen()
                            {
                                 IAsyncResult result;
                                 \_Server.Start();
                                 while (true)
                                 {
                                    **result = \_Server.BeginGetContext(new AsyncCallback(this.HttpCallback), \_Server);**
                                    result.AsyncWaitHandle.WaitOne();
                                 }
                            }
                        

                        Consider the following situation 1 - Loop starts for the first time, value of result will be NULL initially. 2 - It calls _Server.BeginGetContext, asynchronous method call starts and return immediatly. 3 - You call WaitOne() which blocks the loop, so it will wait until the processing finishes. 4 - When processing finishes it waits for next one. So what will happen if another request comes during the execution of previous one ? It will be blocked in this case. Correct ?

                        All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

                        G 1 Reply Last reply
                        0
                        • N N a v a n e e t h

                          Ok- Take a look at your StartListen() method (unwanted lines trimmed).

                              public void StartListen()
                              {
                                   IAsyncResult result;
                                   \_Server.Start();
                                   while (true)
                                   {
                                      **result = \_Server.BeginGetContext(new AsyncCallback(this.HttpCallback), \_Server);**
                                      result.AsyncWaitHandle.WaitOne();
                                   }
                              }
                          

                          Consider the following situation 1 - Loop starts for the first time, value of result will be NULL initially. 2 - It calls _Server.BeginGetContext, asynchronous method call starts and return immediatly. 3 - You call WaitOne() which blocks the loop, so it will wait until the processing finishes. 4 - When processing finishes it waits for next one. So what will happen if another request comes during the execution of previous one ? It will be blocked in this case. Correct ?

                          All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

                          G Offline
                          G Offline
                          George_George
                          wrote on last edited by
                          #26

                          Thanks N a v a n e e t h, When I call EndGetContext, the server is able to process another request, while at the same time, in method HandleRequest, we can retrive input stream and output stream of Http Request from parameter HttpListenerContext context, so that at the same time of waiting for another incoming request, we can read content of request from input stream and processing, then write output to the output stream. Please feel free to correct me if I am wrong. Also, if you have any ideas to improve, I am happy to learn from you. :-) regards, George

                          N 1 Reply Last reply
                          0
                          • G George_George

                            Thanks N a v a n e e t h, When I call EndGetContext, the server is able to process another request, while at the same time, in method HandleRequest, we can retrive input stream and output stream of Http Request from parameter HttpListenerContext context, so that at the same time of waiting for another incoming request, we can read content of request from input stream and processing, then write output to the output stream. Please feel free to correct me if I am wrong. Also, if you have any ideas to improve, I am happy to learn from you. :-) regards, George

                            N Offline
                            N Offline
                            N a v a n e e t h
                            wrote on last edited by
                            #27

                            George_George wrote:

                            When I call EndGetContext, the server is able to process another request

                            yes, it will be able to process other request only at that time. So all the requests came when it executes, has to wait. Other problem I find here is, the IAsyncResult instance is shared, I mean it will be overwritten each time a request occurs. This is not a good idea. One IAsyncResult instance should represent one request, Right ? Looks like you need to refactor this. Consider a design where each request will have it's own IAsyncResult instance. I guess that should solve the problem

                            All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

                            G 1 Reply Last reply
                            0
                            • N N a v a n e e t h

                              George_George wrote:

                              When I call EndGetContext, the server is able to process another request

                              yes, it will be able to process other request only at that time. So all the requests came when it executes, has to wait. Other problem I find here is, the IAsyncResult instance is shared, I mean it will be overwritten each time a request occurs. This is not a good idea. One IAsyncResult instance should represent one request, Right ? Looks like you need to refactor this. Consider a design where each request will have it's own IAsyncResult instance. I guess that should solve the problem

                              All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

                              G Offline
                              G Offline
                              George_George
                              wrote on last edited by
                              #28

                              Thanks N a v a n e e t h, 1. Do you mean the pattern in my code is not truly handles incoming requests at the same time? I do not agee, since I have debugged that, when we call EndGetContext, - then result.AsyncWaitHandle.WaitOne() will return and BeginGetContext is able to run and let next request come in; - at the same time, we can execute HandleRequest for the last request. Why do you think it is not truly handling client requests simultaneously? Could you show me your improvement please? 2.

                              N a v a n e e t h wrote:

                              Looks like you need to refactor this. Consider a design where each request will have it's own IAsyncResult instance. I guess that should solve the problem

                              Are there any benefits doing this? Could you show me a couple of lines of pseudo code please? regards, George

                              N 1 Reply Last reply
                              0
                              • G George_George

                                Thanks N a v a n e e t h, 1. Do you mean the pattern in my code is not truly handles incoming requests at the same time? I do not agee, since I have debugged that, when we call EndGetContext, - then result.AsyncWaitHandle.WaitOne() will return and BeginGetContext is able to run and let next request come in; - at the same time, we can execute HandleRequest for the last request. Why do you think it is not truly handling client requests simultaneously? Could you show me your improvement please? 2.

                                N a v a n e e t h wrote:

                                Looks like you need to refactor this. Consider a design where each request will have it's own IAsyncResult instance. I guess that should solve the problem

                                Are there any benefits doing this? Could you show me a couple of lines of pseudo code please? regards, George

                                N Offline
                                N Offline
                                N a v a n e e t h
                                wrote on last edited by
                                #29

                                George_George wrote:

                                Do you mean the pattern in my code is not truly handles incoming requests at the same time?

                                I felt so. Your code won't handle as you are calling WaitOne which will block it. Also the IAsyncResult instance will be overwritten each time. I am not telling that your code can't handle two requests, I am telling it can't handle simultaneous requests because of that blocking.

                                George_George wrote:

                                Are there any benefits doing this? Could you show me a couple of lines of pseudo code please?

                                There are many. You can execute many requests simultaneously. Consider the following pseudo code 1 - Inside the StartListen method, remove call to WaitOne. 2 - Put IAsyncResult inside that loop. Which means IAsyncResult will be created for each request. 3 - Create another class for doing request handling, where you pass this IAsyncresult instance. So ultimately you will have each IAsyncResult instance for each request. I am not sure about I am correct. But have a try and modify it according to your need.

                                All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

                                G 1 Reply Last reply
                                0
                                • N N a v a n e e t h

                                  George_George wrote:

                                  Do you mean the pattern in my code is not truly handles incoming requests at the same time?

                                  I felt so. Your code won't handle as you are calling WaitOne which will block it. Also the IAsyncResult instance will be overwritten each time. I am not telling that your code can't handle two requests, I am telling it can't handle simultaneous requests because of that blocking.

                                  George_George wrote:

                                  Are there any benefits doing this? Could you show me a couple of lines of pseudo code please?

                                  There are many. You can execute many requests simultaneously. Consider the following pseudo code 1 - Inside the StartListen method, remove call to WaitOne. 2 - Put IAsyncResult inside that loop. Which means IAsyncResult will be created for each request. 3 - Create another class for doing request handling, where you pass this IAsyncresult instance. So ultimately you will have each IAsyncResult instance for each request. I am not sure about I am correct. But have a try and modify it according to your need.

                                  All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

                                  G Offline
                                  G Offline
                                  George_George
                                  wrote on last edited by
                                  #30

                                  Thanks N a v a n e e t h, Really great answer! I further question before I am able to write code to re-construct. When will the event which WaitOne is wait on be signalled? When we call EndGetContext or when there is a ready asynchronous I/O client Http request ready -- at the time when the callback (as the first parameter to BeginGetContext) is called? Or something else? regards, George

                                  N 1 Reply Last reply
                                  0
                                  • G George_George

                                    Thanks N a v a n e e t h, Really great answer! I further question before I am able to write code to re-construct. When will the event which WaitOne is wait on be signalled? When we call EndGetContext or when there is a ready asynchronous I/O client Http request ready -- at the time when the callback (as the first parameter to BeginGetContext) is called? Or something else? regards, George

                                    N Offline
                                    N Offline
                                    N a v a n e e t h
                                    wrote on last edited by
                                    #31

                                    George_George wrote:

                                    When will the event which WaitOne is wait on be signalled?

                                    :confused: You don't need to call WaitOne. When the asynchronous method process, it will call back, there you can do EndGetContext to get the result.

                                    All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

                                    G 1 Reply Last reply
                                    0
                                    • N N a v a n e e t h

                                      George_George wrote:

                                      When will the event which WaitOne is wait on be signalled?

                                      :confused: You don't need to call WaitOne. When the asynchronous method process, it will call back, there you can do EndGetContext to get the result.

                                      All C# applications should call Application.Quit(); in the beginning to avoid any .NET problems.- Unclyclopedia How to use google | Ask smart questions

                                      G Offline
                                      G Offline
                                      George_George
                                      wrote on last edited by
                                      #32

                                      Thanks N a v a n e e t h! Is this your suggested solution? Code change, - removed IAsyncResult result; - removed result.AsyncWaitHandle.WaitOne(); - change from result = _Server.BeginGetContext(new AsyncCallback(this.HttpCallback), _Server) to _Server.BeginGetContext(new AsyncCallback(this.HttpCallback), _Server);

                                      using System;
                                      using System.Collections.Generic;
                                      using System.ComponentModel;
                                      using System.Data;
                                      using System.Diagnostics;
                                      using System.ServiceProcess;
                                      using System.Text;
                                      using System.Net;
                                      using System.Threading;

                                      namespace TestServiceStop1
                                      {
                                      public partial class Service1 : ServiceBase
                                      {
                                      private Thread _tHttpThread;
                                      private TestHttpServer _server;

                                          public Service1()
                                          {
                                              InitializeComponent();
                                          }
                                      
                                          protected override void OnStart(string\[\] args)
                                          {
                                              \_server = new TestHttpServer(this);
                                      
                                              \_tHttpThread = new Thread(\_server.StartListen);
                                      
                                              \_tHttpThread.Start();
                                          }
                                      
                                          protected override void OnStop()
                                          {
                                              // stop HTTP server
                                              \_server.Stop(false);
                                          }
                                      }
                                      
                                      public class TestHttpServer
                                      {
                                          // listening HTTP port
                                          private int \_Port = 0;
                                      
                                          // internal wrapped HTTP listener
                                          private HttpListener \_Server = new HttpListener();
                                      
                                          private Service1 \_manager;
                                      
                                          public TestHttpServer (Service1 manager)
                                          {
                                              \_manager = manager;
                                          }
                                      
                                          public int ListenPort
                                          {
                                              get
                                              {
                                                  return \_Port;
                                              }
                                              set
                                              {
                                                  \_Port = value;
                                              }
                                          }
                                      
                                          public void StartListen()
                                          {
                                              try
                                              {
                                      
                                                  \_Server.Prefixes.Add(String.Format("http://+:{0}/", 9099));
                                                  \_Server.Start();
                                                  while (true)
                                                  {
                                      								\_Server.BeginGetContext(new AsyncCallback(this.HttpCallback), \_Server);
                                                  }
                                              }
                                              // any exceptions are not expected
                                              // catch InvalidOperationException during service stop
                                              // \[System.InvalidOperationException\] = {"Please call the Start() method before calling this method."}
                                              catch (Exception ex)
                                              {
                                                  throw ex;
                                              }
                                          }
                                      
                                          public void Stop(bool isTerminate)
                                          {
                                              \_Server.Stop();
                                          }
                                      
                                          // cal
                                      
                                      1 Reply Last reply
                                      0
                                      • G GDavy

                                        George_George wrote:

                                        while (true) { result = _Server.BeginGetContext(new AsyncCallback(this.HttpCallback), _Server); result.AsyncWaitHandle.WaitOne(); }

                                        In your StartListen you get in this endless loop. So after stopping the server the call to

                                        _Server.BeginGetContext(new AsyncCallback(this.HttpCallback), _Server);

                                        most likely throws this exception. You will need to check if the _Server object is still active before calling the BeginGetContext I guess...

                                        S Offline
                                        S Offline
                                        suzuuu
                                        wrote on last edited by
                                        #33

                                        you should put break for while loop...

                                        while (true)
                                        {
                                        try
                                        {
                                        result = _Server.BeginGetContext(new AsyncCallback(this.HttpCallback), _Server);
                                        result.AsyncWaitHandle.WaitOne();
                                        }catch (HttpListenerException) { break; }
                                        catch (InvalidOperationException) { break; }

                                                    }
                                        
                                        1 Reply Last reply
                                        0
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes


                                        • Login

                                        • Don't have an account? Register

                                        • Login or register to search.
                                        • First post
                                          Last post
                                        0
                                        • Categories
                                        • Recent
                                        • Tags
                                        • Popular
                                        • World
                                        • Users
                                        • Groups