|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Want a new Job?
Chapters
Services
Feature Zones
|
IntroductionThe .NET remoting architecture is world-famous for its flexibility and versatility with Here is one limitation that I want to point out. Then I will show a workaround, exploiting The problem: I have two remote services named Knossos and Zakros with channel configuration entries for Knossos: <channel ref="tcp" port="9000" name = "Two way binary tcp channel">
and for Zacros: <channel ref="tcp" port="9000" name = "Two way soap tcp channel">
Note that the transport is TCP for either service but the formatting is 'binary' for Knossos and 'soap' for Zakros. Next comes a client app that can communicate with both Zakros and Knossos. Here is for Knossos: <channel ref="tcp" port="8000" name="Two way binary client tcp channel">
and for Zakros: <channel ref="tcp" port="8080" name="Two way soap client tcp channel">
Note again that the transport is TCP for either but formatting is binary and SOAP. There is a single client app that must communicate with Knossos using the TCP-binary channel and with Zakros using the TCP-soap channel. That is the problem. The comunication with Knossos over the TCP-binary channel will work just fine. However, the communication with Zakros over the TCP-soap channel will not work. The reason for this is that the remoting system will pick the first TCP channel from the list of registered channels without Everything would work just fine if the connection to Zakros was configured as an HTTP-soap channel. But that is not the desired configuartion. One possible workaround is to dynamically insert the appropriate formatters. We can do this with the help of a custom client sink provider. Here is the class definition. public class AbstractClientFormatterSinkProvider
For the remoting system to accept this client channel sink provider the client's config file must be changed like so: <clientProviders>
This reflects that the assembly 'RemotingHelper.dll' contains the class And inside the client app the code connecting to the servers Knossos and Zakros is as follows: String urlKnossos = "tcp://knossos:9000/KnossosObject.rem";
The third parameters 'binary' and 'soap' are passed to the provider's CreateSink method as remoteChannelData, providing the necessary information to dynamically insert the appropriate formatter sink provider.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||