
КОП-Примеры / УдалОбъект
.docПример 13.1. Удалённый объект.
/////////////////////////
// C# File csRemOb
using System;
namespace csRemObj
{
public interface IRemObj
{
int GetAdd (int par);
}
public class RemObj : MarshalByRefObject, IRemObj
{
private int n= 0;
public RemObj ( )
{
Console.WriteLine ("Constructor");
}
public int GetAdd (int par)
{
n++;
Console.WriteLine ("\nGetAdd n= " + n
+ " par= " + par + " return " + (n + par));
return n + par;
}
}
}
Пример 13.2. Серверная активизация удалённого объекта разновидности Singleton. Сервер использует RemotingConfiguration.Register-
Well KnownServiceType().
/////////////////////////
// C# File csServer_Singleton
// Подключить (AddReferance) библиотеку System.Runtime.Remoting.dll.
// Подключить (AddReferance) библиотеку csRemObj.dll.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using csRemObj;
namespace csServer_Singleton
{
class RemObjServer
{
static void Main (string[] args)
{
HttpChannel httpChannel= new HttpChannel (8080);
ChannelServices.RegisterChannel (httpChannel, false);
RemotingConfiguration.RegisterWellKnownServiceType (
typeof (csRemObj_Dll_a.RemObj),
"RemoteObject",
WellKnownObjectMode.Singleton);
System.Console.WriteLine ("Wait to exit");
System.Console.ReadLine ( );
}
}
}
Пример 13.3. Серверная активизация удалённого объекта разновидности SingleCall. Сервер использует RemotingConfiguration.RegisterWellKnownServiceType().
/////////////////////////
// C# File csServer_SingleCall
// Подключить (AddReferance) библиотеку System.Runtime.Remoting.dll.
// Подключить (AddReferance) библиотеку csRemObj.dll.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using csRemObj;
namespace csServer_SingleCall
{
class RemObjServer
{
static void Main (string[] args)
{
HttpChannel httpChannel= new HttpChannel (8080);
ChannelServices.RegisterChannel (httpChannel);
RemotingConfiguration.RegisterWellKnownServiceType (
typeof (csRemObj_Dll_a.RemObj),
"RemoteObject",
WellKnownObjectMode.SingleCall);
System.Console.WriteLine ("Wait to exit");
System.Console.ReadLine ( );
}
}
}
Пример 13.4. Серверная активизация удалённого объекта разновидности Singleton. Клиент использует Activator.GetObject().
/////////////////////////
// C# File csRemObj
// Файл используемого удалённого объекта из примера 13.1.
////////////////////////
// C# File csServer_Singleton
// Файл используемого сервера из примера 13.2.
// Результат выполнения сервера csServer_Singleton
// совместно с клиентом csClient_ Singleton
/*
Result:
Wait to exit
Constructor
GetAdd n= 1 par= 5 return 6
GetAdd n= 2 par= 10 return 12
*/
/////////////////////////
// C# File csClien
// Подсоединить (AddReference) библиотеку System.Runtime.Remoting.dll и
// подсоединить библиотеку csRemObj.dll.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using csRemObj;
namespace csClient_Singleton
{
class RemObjClient
{
static void Main (string[] args)
{
RemObj objServ;
HttpChannel httpChannel= new HttpChannel (0);
ChannelServices.RegisterChannel (httpChannel, false);
objServ= (RemObj) Activator.GetObject (
typeof (RemObj),
"http://localhost:8080/RemoteObject");
Console.WriteLine ("результат objServ.GetAdd (5))= " +
objServ.GetAdd (5));
Console.WriteLine ("результат objServ.GetAdd (10))= " +
objServ.GetAdd (10));
Console.WriteLine ("Press ENTER to exit");
Console.ReadLine ( );
}
}
}
Пример 13.5. Серверная активизация удалённого объекта разновидности SingleCall. Клиент использует Activator.GetObject().
/////////////////////////
// C# File csRemObj
// Файл используемого удалённого объекта из примера 13.1.
////////////////////////
// C# File csServer_SingleCall
// Файл используемого сервера из примера 13.3.
// Результат выполнения сервера csServer_SingleCall совместно
// с клиентом csClientl
/*
Result:
Wait to exit
Constructor
Constructor
GetAdd n= 1 par= 5 return 6
Constructor
GetAdd n= 1 par= 10 return 11
*/
/////////////////////////
// C# File csClient
// Файл используемого клиента из примера 13.4.
// Результат выполнения клиента csClient совместно с сервером
// csServer_SingleCall
/*
Result:
результат objServ.GetAdd (5) = 6
результат objServ.GetAdd (10)= 11
Press ENTER to exit
*/
Пример 13.6. Серверная активизация удалённого объекта разновидности Singleton. Клиент использует RemotingServices.Connect().
/////////////////////////
// C# File csRemObj
// Файл используемого удалённого объекта из примера 13.1.
////////////////////////
// C# File csServer_Singleton
// Файл используемого сервера из примера 13.2.
// Результат выполнения сервера csServer_Singleton совместно
// с клиентом csClient_Connect
/*
Result:
Wait to exit
Constructor
GetAdd n= 1 par= 5 return 6
GetAdd n= 2 par= 10 return 12
*/
/////////////////////////
// C# File csClient_Connect
// Подсоединить (AddReference) библиотеку System.Runtime.Remoting.dll и
// подсоединить библиотеку csRemObj.dll.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using csRemObj;
namespace csClient_Connect
{
class RemObjClient
{
static void Main (string[] args)
{
HttpChannel httpChannel= new HttpChannel (0);
ChannelServices.RegisterChannel (httpChannel, false);
RemObj objServ= (RemObj) RemotingServices.Connect
(typeof (csRemObj.IRemObj),
"http://localhost:8080/RemoteObject");
Console.WriteLine ("результат objServ.GetAdd (5))= " +
objServ.GetAdd (5));
Console.WriteLine ("результат objServ.GetAdd(10))= " +
objServ.GetAdd (10));
Console.WriteLine ("Press ENTER to exit");
Console.ReadLine ( );
}
}
}
Пример 13.7. Серверная активизация удалённого объекта разновидности SingleCall. Клиент использует RemotingServices.Connect().
/////////////////////////
// C# File csRemObj
// Файл используемого удалённого объекта из примера 13.1.
////////////////////////
// C# File csServer_SingleCall
// Файл используемого сервера из примера 13.3.
// Результат выполнения сервера csServer_SingleCall совместно
// с клиентом csClient
/*
Result:
Wait to exit
Constructor
Constructor
GetAdd n= 1 par= 5 return 6
Constructor
GetAdd n= 1 par= 10 return 11
*/
/////////////////////////
// C# File csClient_Connect
// Файл используемого клиента из примера 13.6.
// Результат выполнения клиента csClient_Connect совместно с сервером
// csServer_SingleCall
Пример 13.8. Клиентская активизация удалённого объекта. Клиент использует RemotingConfiguration.RegisterActivatedClientType().
/////////////////////////
// C# File csRemObj
// Файл используемого удалённого объекта из примера 13.1.
/////////////////////////
// C# File cs_Server_CA
// Подключить (AddReferance) библиотеку System.Runtime.Remoting.dll.
// Подключить (AddReferance) библиотеку csRemObj.dll.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using csRemObj;
namespace csServer_CA
{
class RemObjServer
{
static void Main (string[] args)
{
HttpChannel httpChannel= new HttpChannel (8080);
ChannelServices.RegisterChannel (httpChannel, false);
RemotingConfiguration.ApplicationName="RemoteObject";
Type remType= typeof (RemObj);
RemotingConfiguration.RegisterActivatedServiceType (remType);
System.Console.WriteLine ("Wait to exit");
System.Console.ReadLine ( );
}
}
}
// Результат выполнения сервера csServer_CA совместно
// с клиентом cClient_CA
/*
Result:
Wait to exit
Constructor
GetAdd n= 1 par= 5 return 6
GetAdd n= 2 par= 10 return 12
*/
/////////////////////////
// C# File csClient_CA
// Подсоединить (AddReference) библиотеку System.Runtime.Remoting.dll и
// подсоединить библиотеку csRemObj.dll.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Activation;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using csRemObj;
namespace csClient_CA
{
class RemObjClient
{
static void Main (string[] args)
{
HttpChannel httpChannel= new HttpChannel (0);
ChannelServices.RegisterChannel (httpChannel, false);
RemotingConfiguration.RegisterActivatedClientType (
typeof (csRemObj_Dll_a.RemObj),
"http://localhost:8080/RemoteObject");
RemObj objServ= new RemObj ( );
Console.WriteLine ("результат objServ.GetAdd (5))= " +
objServ.GetAdd (5));
Console.WriteLine ("результат objServ.GetAdd (10))= " +
objServ.GetAdd (10));
Console.WriteLine ("Press ENTER to exit");
Console.ReadLine ( );
}
}
}
Пример 13.9. Клиентская активизация удалённого объекта. Клиент использует Activator.CreateInstance().
/////////////////////////
// C# File csRemObj
// Файл используемого удалённого объекта из примера 13.1.
/////////////////////////
// C# File csServer_CA
// Файл используемого сервера csServer_CA из примера 13.8(13.6.1).
// Результат выполнения сервера csServer_CA совместно
// с клиентом csClient_CI
/*
Result:
Wait to exit
Constructor
GetAdd n= 1 par= 5 return 6
GetAdd n= 2 par= 10 return 12
*/
/////////////////////////
// C# File csClient_CI
// Подсоединить (AddReference) библиотеку System.Runtime.Remoting.dll и
// подсоединить библиотеку csRemObj.dll.
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Activation;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using System.Security.Permissions;
using csRemObj;
namespace csClient_CI
{
class RemObjClient
{
static void Main(string[] args)
{
HttpChannel httpChannel= new HttpChannel (0);
ChannelServices.RegisterChannel (httpChannel, false);
object [] attrs={new UrlAttribute
("http://localhost:8080/RemoteObject")};
ObjectHandle oh= Activator.CreateInstance (
"csRemObj",
"csRemObj.RemObj",
attrs);
RemObj objServ= (RemObj) oh.Unwrap ( );
Console.WriteLine ("результат objServ.GetAdd (5))= " +
objServ.GetAdd (5));
Console.WriteLine ("результат objServ.GetAdd (10))= " +
objServ.GetAdd (10));
Console.WriteLine ("Press ENTER to exit");
Console.ReadLine ( );
}
}
}