Ken Kolda
10/27/2004 3:26:00 PM
Calling StartListener/StopListener is really only necessary if you're
implementing your own client/server protocol. When you're using remoting,
that's all take care of for you. I can only assume the examples you saw
weren't using remoting, otherwise I'm not sure why they'd be doing this.
Ken
"Chris Q." <ChrisQ@discussions.microsoft.com> wrote in message
news:6A99D793-D57F-4BAC-AB6C-65A1AD0C560A@microsoft.com...
> Ken,
>
> I really appreciate your help. Once I removed the
TCPListener.StartListening
> and TCPListerner.StopListening methods everything began working perfectly.
> Thank you so much! This has been a 14 hours stumbling block for me.
>
> I did included the registration of the objects in the OnStart method
because
> all the examples I have seen do this. However, the same examples show a
call
> to the StartListening and StopListening methods.
>
> Later!
> Chris
>
> "Ken Kolda" wrote:
>
> > The first problem I see is that you should not be calling the
> > StartListening() method on the TCPListener object. The remoting
framework
> > will take care of that for you. What I'm guessing is that when you call
this
> > an exception occurs and it calls OnStop() (which, I'm guessing, stops
the
> > TCPListener from listening). Why you don't see anything in the event log
I'm
> > not sure. Do you see the "Application Server Registered" entry in the
log
> > after the remote object is registered?
> >
> > Also, you don't show this but I assume this code is on the OnStart()
method
> > of the service class (which is good). If not, you should either put it
there
> > or somewhere else you can ensure will only run once.
> >
> > Ken
> >
> >
> > "Chris Q." <ChrisQ@discussions.microsoft.com> wrote in message
> > news:CAF9682A-C592-4FDE-BB1D-9199DA588284@microsoft.com...
> > > The service is written to write notification events into the
application
> > > event log, and there are no events indicating that the service is not
> > > running. I'm using Try...Catch blocks to write events to the log if
any
> > > problems occur.
> > >
> > > Here is the working console server:
> > > Sub Main()
> > > Dim TCPListener As TcpChannel
> > > TCPListener = New TcpChannel(2550)
> > > ChannelServices.RegisterChannel(TCPListener)
> > >
> > > Try
> > > RemotingConfiguration.ApplicationName = "ResumeServer"
> > >
> > >
> >
RemotingConfiguration.RegisterWellKnownServiceType(GetType(ApplicantServer),
> > > "applicants.rem", WellKnownObjectMode.SingleCall)
> > > Configuration.WriteEvent("Applicant Server Registered",
> > > EventLogEntryType.Information, 50090)
> > > Catch rex As RemotingException
> > > Configuration.WriteEvent(rex.Message,
EventLogEntryType.Error,
> > > 50010)
> > > Catch ex As Exception
> > > Configuration.WriteEvent(ex, EventLogEntryType.Error,
50000)
> > > End Try
> > >
> > > Try
> > > TCPListener.StartListening(Nothing)
> > > Configuration.WriteEvent("The Resumè server is listening
on
> > port
> > > 2550" & vbCrLf & URLList.ToString, EventLogEntryType.Information, 0)
> > > Catch ex As Exception
> > > Configuration.WriteEvent(ex, EventLogEntryType.Error,
50020)
> > > End Try
> > > Console.ReadLine()
> > > TCPListener.StopListening(Nothing)
> > > End Sub
> > >
> > > Here is the working console client:
> > > Sub Main()
> > > Dim ServerClient As TFF.ResumeManager.IApplicant =
> > > Activator.GetObject(GetType(TFF.ResumeManager.IApplicant),
> > > "http://localhost:2550/ResumeServer/applicants.rem")
> > >
> > > Try
> > > Dim ApplicantList As DataSet =
> > > ServerClient.LoadApplicantList(True)
> > > Console.WriteLine(ApplicantList.ToString())
> > > Catch ex As System.Net.Sockets.SocketException
> > > Console.WriteLine(ex.Message)
> > > Console.WriteLine(ex.StackTrace)
> > > Catch ex As System.Net.WebException
> > > Console.WriteLine(ex.Message)
> > > Console.WriteLine(ex.StackTrace)
> > > Catch ex As Exception
> > > Console.WriteLine(ex.Message)
> > > Console.WriteLine(ex.StackTrace)
> > > End Try
> > > Console.ReadLine()
> > > End Sub
> > >
> > > Here is the service that is not currently working:
> > > TCPListener = New HttpChannel(2550)
> > > ChannelServices.RegisterChannel(TCPListener)
> > >
> > > Try
> > > RemotingConfiguration.ApplicationName = "ResumeServer"
> > >
> > >
> >
RemotingConfiguration.RegisterWellKnownServiceType(GetType(ApplicantServer),
> > > "applicants.rem", WellKnownObjectMode.SingleCall)
> > > ServerUtility.WriteEvent("Applicant Server Registered",
> > > EventLogEntryType.Information, 50090)
> > > Catch rex As RemotingException
> > > ServerUtility.WriteEvent("Line 76",
> > EventLogEntryType.Information)
> > > ServerUtility.WriteEvent(rex.Message,
EventLogEntryType.Error,
> > > 50010)
> > > Catch ex As Exception
> > > ServerUtility.WriteEvent("Line 78",
> > EventLogEntryType.Information)
> > > ServerUtility.WriteEvent(ex, EventLogEntryType.Error,
50000)
> > > Finally
> > > Me.OnStop()
> > > End Try
> > >
> > > Try
> > > TCPListener.StartListening(Nothing)
> > > ServerUtility.WriteEvent("The Resumè server is listening
on
> > port
> > > 2550" & vbCrLf & URLList.ToString, EventLogEntryType.Information, 0)
> > > Catch ex As Exception
> > > ServerUtility.WriteEvent("Line 96",
> > EventLogEntryType.Information)
> > > ServerUtility.WriteEvent(ex, EventLogEntryType.Error,
50020)
> > > OnStop()
> > > End Try
> > >
> > > The activator on the client works fine until I call a method on the
> > remoting
> > > object which is inheriting from MarshalByRef. I get a null reference
from
> > the
> > > service server. I get a dataset from the console server.
> > >
> > > Thanks for any assistance.
> > >
> > > "Ken Kolda" wrote:
> > >
> > > > A few questions/comments:
> > > >
> > > > 1) Does your service start and stay running or does it terminate
> > immediately
> > > > after starting?
> > > > 2) Assuming the service starts, can you connect to the port it's
using
> > via
> > > > telnet to verify the server is listening for connections?
> > > > 3) You must be getting some kind of exception, either from the
server or
> > > > from the client when you attempt to connect. Can you post that in
its
> > > > entirety?
> > > >
> > > > If you could post the code of your service class, that would help
too.
> > Don't
> > > > post all your code -- just the class that derives from ServiceBase
and
> > only
> > > > the code that registers the channel and any remoting objects.
> > > >
> > > > Ken
> > > >
> > > >
> > > > "Chris Q." <ChrisQ@discussions.microsoft.com> wrote in message
> > > > news:B7C9538A-992A-4CDF-843F-7099819DFEE9@microsoft.com...
> > > > > I am designing a client/server application that will utilize
remoting.
> > I
> > > > am
> > > > > able to get things working without a problem using console
> > applications,
> > > > but
> > > > > when I desire to create a windows service, I get all kinds of
> > errors...
> > > > none
> > > > > of which are traceable.
> > > > >
> > > > > This is how I began the process. I first created the console
server
> > and
> > > > the
> > > > > console client. I verified that they are working properly with
both
> > TCP
> > > > > channels and HTTP channels. However, when I take the exact same
code
> > and
> > > > > place it into a windows service, I get no-descriptive errors and
> > > > > connectionsink problems.
> > > > >
> > > > > I'm using well known single call objects on the server. The idea
is to
> > > > > contact the server to retrieve or save a dataset. This works
> > beautifully
> > > > with
> > > > > the console apps either on a single machine or on seperate
machines.
> > > > However,
> > > > > when I attempt to do the same task in a windows service on
seperate
> > > > machines,
> > > > > I get the errors.
> > > > >
> > > > > Anyone run into similar problems?
> > > > >
> > > > > Thanks!
> > > >
> > > >
> > > >
> >
> >
> >