![]() |
General Programming »
Internet / Network »
Remoting
Intermediate
.NET Remoting: Passing through the obstacles path from version 1.0 to 1.1By Cohen Shwartz OrenHouston, we have a problem. One small step for mankind, one Giant irritation for developers. |
C#, Windows, .NET 1.1VS.NET2003, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
The following article's aim is to help those of you who want to use .NET Remoting on Framework 1.1*. This article will not teach you Remoting, mainly because I am not an expert on that field. Furthermore, my CodeProject colleagues published some useful and nice to read articles on that issue (see links below). The attached projects were kept simple as possible to allow you to overcome the changes presented by Framework 1.1*. It handles the maladies of security exception, serialization and delegates issues.
Recently, I have faced the challenge of exposing objects via .NET Remoting. Like the most of you, I have started with the MSDN, and of course CodeProject, but all the examples were suited for Framework 1.0 only. Attempts to run 1.0 project on a 1.1 Framework ends with lots of exceptions.
System.DelegateSerializationHolder and the types derived from it (such as System.DelegateSerializationHolder) are not permitted to be deserialized at this security level.
System.Runtime.Remoting.ObjRef cannot be accessed.
The web is full of developers' complaints on the very same problems but I have not found a simple, corrective and comprehensive example. So there you have it!.
<system.runtime.remoting>
<application name="ServerAssembly" >
<service>
<!-- type: is the full type name
(type the class that inherit from MBR,assembly) of the
object-->
<!-- objectUri - alias -->
<!-- Server tells remoting Here's a type
Here's how and when to instantiate the type
Here's the name (end point) a client will use to contact the type
-->
<wellknown mode="Singleton"
type="SharedAssembly.SharedObj, SharedAssembly"
objectUri="ParachuteExample" />
</service>
<channels>
<channel ref="tcp" port="6123">
<serverProviders>
<formatter ref="binary" typeFilterLevel="Full" />
</serverProviders>
</channel>
</channels>
</application>
</system.runtime.remoting>
RemotingConfiguration.Configure ("ServerAssembly.exe.config");
<system.runtime.remoting>
<application>
<client>
<wellknown
type="SharedAssembly.SharedObj, SharedAssembly"
url="tcp://localhost:6123/ParachuteExample"
/>
</client>
<channels>
<channel ref="tcp" port="0">
<clientProviders>
<formatter ref="binary" />
</clientProviders>
<serverProviders>
<formatter ref="binary" typeFilterLevel="Full" />
</serverProviders>
</channel>
</channels>
</application>
RemotingConfiguration.Configure ("ClientAssembly.exe.config");
SharedObj remObject = new SharedObj();
BinaryClientFormatterSinkProvider clientProvider = null;
BinaryServerFormatterSinkProvider serverProvider =
new BinaryServerFormatterSinkProvider();
serverProvider.TypeFilterLevel =
System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
IDictionary props = new Hashtable();
props["port"] = 6123;
props["typeFilterLevel"] = TypeFilterLevel.Full;
TcpChannel chan = new TcpChannel(
props,clientProvider,serverProvider);
ChannelServices.RegisterChannel(chan);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(SharedObj),
"ParachuteExample",
WellKnownObjectMode.Singleton);
BinaryClientFormatterSinkProvider clientProvider =
new BinaryClientFormatterSinkProvider();
BinaryServerFormatterSinkProvider serverProvider =
new BinaryServerFormatterSinkProvider();
serverProvider.TypeFilterLevel =
System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
IDictionary props = new Hashtable();
props["port"] = 0;
string s = System.Guid.NewGuid().ToString();
props["name"] = s;
props["typeFilterLevel"] = TypeFilterLevel.Full;
TcpChannel chan = new TcpChannel(
props,clientProvider,serverProvider);
ChannelServices.RegisterChannel(chan);
Type typeofRI = typeof(IParachute);
IParachute remObject = (IParachute)Activator.GetObject( typeofRI,
"tcp://localhost:6123/ParachuteExample");
Since some of you like configuration files while others like to connect and create the well known object via code, I have included two projects accordingly. Both projects, codeActivationExample.zip and configFileExample.zip, include the same assemblies as follows:
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 31 Mar 2004 Editor: Smitha Vijayan |
Copyright 2004 by Cohen Shwartz Oren Everything else Copyright © CodeProject, 1999-2009 Web17 | Advertise on the Code Project |