> That must have been from the high-carb, -sugar, -fat, and -caffeinated
foods 
> (and maybe even alcohol) you consumed during the day - definitely not
because
> of our teaching style :-)

Yes. It was definitely the vacation-like "diet" mixed with 12 hours a day of
in-depth content. Well, OK, maybe Jason put me asleep a little, but not you
or Keith (j/k Jason). :-)

> If you use an event, you'll need to work around some assembly resolution
issues
> a little more.  I have a sample demonstrating one such work around
here[1].
> [1] http://staff.develop.com/woodring/dotnet/#RemoteEvents

Your sample was EXACTLY what I was looking for. BTW, I'm glad you took the
time to put the in-depth comments in the client.cs file - very descriptive,
extremely helpful, and paints a clear picture of what's actually happening.
Although, I'll probably be re-re-reading that a few times today.

Thanks again,

Sean

-----Original Message-----
From: Moderated discussion of advanced .NET topics.
[mailto:[EMAIL PROTECTED]] On Behalf Of Mike Woodring
(DevelopMentor)
Sent: Wednesday, February 12, 2003 3:28 PM
To: [EMAIL PROTECTED]
Subject: Re: [ADVANCED-DOTNET] Asynch Remoting Call Fails


> I should have been  using my course
> materials from the Guerrilla .NET class you taught in LA. :)
>
> I guess my eyes must have glazed over after the first 12 hour day or 
> something

That must have been from the high-carb, -sugar, -fat, and -caffeinated foods
(and maybe even alcohol) you consumed during the day - definitely not
because of our teaching style :-)

> but...all I'm really trying to do is create a "hello
> world" type of remoting app using binary/tcp between the client and 
> server with an asycn callback to the client.

Once you iron our your assembly naming issue (see my other reply) then you
can switch back to tcp/binary in your code easily enough.  You still won't
have a callback from the server to the client.  You're use of delegates just
means you're leveraging someone else's thread to make the long blocking call
from the client to the server while you go off and do other things.  If you
totally eliminate your use of delegates in the code you posted, you'd have
the same thing - just your main thread blocking instead of a threadpool
thread.  Either way, there's no callback being made from the server to the
client.

If you want a callback from the server to the client, then you just need to
code that relationship in.  For example, you might redefine
Server.TimeConsumingRemoteCall so that it's annotated with the [OneWay]
attribute, returns void, and so that it takes a reference to an interface
that your client class implements.  The [OneWay] attribute will prevent your
client from blocking until the method call makes it to the server and back -
your client program will simply issue the request message to the server and
return right away.  Because it's a one-way method, only input arguments are
supported (no out/ref or retval).  Then when the server finishes carrying
out the long operation, it can call back through the interfaced passed as an
input parameter to the client, notifying you that the long operation has
finished (and providing you with the results if you like).

Alternatively, you can use an event-based callback model instead of an
interface-based callback model.  In either case, you'll need to make sure
that the server program has access to the "right" amount of metadata
describing the client interface/class.  If you go with an interface that's
defined in it's own dll then this is easy - as both the client & server
programs will have access to the library (the client because it's
implementing the interface, the server because it's programming against the
interface).  If you use an event, you'll need to work around some assembly
resolution issues a little more.  I have a sample demonstrating one such
work around here[1].

Also, in either scenario you can change the client to pass 0 to the
constructor for the http/tcp channel so that a random unused port is
selected.  No need to hard code the port number used by the client to accept
callbacks.  Only the server's port needs to be well known.

-Mike
DevelopMentor
http://staff.develop.com/woodring

[1] http://staff.develop.com/woodring/dotnet/#RemoteEvents

Reply via email to