- Client 소스 예.
using System;
using System.Runtime.Remoting.Channels.Ipc;
using System.Security.Permissions;
using dllobject;
public class Client
{
[SecurityPermission(SecurityAction.Demand)]
public static void Main(string[] args)
{
// Create the channel.
IpcChannel channel = new IpcChannel();
// Register the channel.
System.Runtime.Remoting.Channels.ChannelServices.
RegisterChannel(channel);
// Register as client for remote object.
System.Runtime.Remoting.WellKnownClientTypeEntry remoteType =
new System.Runtime.Remoting.WellKnownClientTypeEntry(
typeof(RemoteObject),
"ipc://localhost:9090/RemoteObject.rem");
System.Runtime.Remoting.RemotingConfiguration.
RegisterWellKnownClientType(remoteType);
// Create a message sink.
string objectUri;
System.Runtime.Remoting.Messaging.IMessageSink messageSink =
channel.CreateMessageSink(
"ipc://localhost:9090/RemoteObject.rem", null,
out objectUri);
Console.WriteLine("The URI of the message sink is {0}.",
objectUri);
if (messageSink != null)
{
Console.WriteLine("The type of the message sink is {0}.",
messageSink.GetType().ToString());
}
// Create an instance of the remote object.
RemoteObject service = new RemoteObject();
// Invoke a method on the remote object.
Console.WriteLine("The client is invoking the remote object.");
while (true)
{
try
{
Console.WriteLine("The remote object has been called {0} times.",
service.GetCount());
}
catch
{
Console.WriteLine("channel fail...");
}
}
}
}
- Server 소스 예제.
using System;
using System.Runtime.Remoting.Channels.Ipc;
using System.Security.Permissions;
using dllobject;
public class Server
{
[SecurityPermission(SecurityAction.Demand)]
public static void Main(string[] args)
{
try
{
// Create the server channel.
IpcChannel serverChannel =
new IpcChannel("localhost:9090");
// Register the server channel.
System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(
serverChannel);
// Show the name of the channel.
Console.WriteLine("The name of the channel is {0}.",
serverChannel.ChannelName);
// Show the priority of the channel.
Console.WriteLine("The priority of the channel is {0}.",
serverChannel.ChannelPriority);
// Show the URIs associated with the channel.
System.Runtime.Remoting.Channels.ChannelDataStore channelData =
(System.Runtime.Remoting.Channels.ChannelDataStore)
serverChannel.ChannelData;
foreach (string uri in channelData.ChannelUris)
{
Console.WriteLine("The channel URI is {0}.", uri);
}
// Expose an object for remote calls.
System.Runtime.Remoting.RemotingConfiguration.
RegisterWellKnownServiceType(
typeof(RemoteObject), "RemoteObject.rem",
System.Runtime.Remoting.WellKnownObjectMode.Singleton);
// Parse the channel's URI.
string[] urls = serverChannel.GetUrlsForUri("RemoteObject.rem");
if (urls.Length > 0)
{
string objectUrl = urls[0];
string objectUri;
string channelUri = serverChannel.Parse(objectUrl, out objectUri);
Console.WriteLine("The object URI is {0}.", objectUri);
Console.WriteLine("The channel URI is {0}.", channelUri);
Console.WriteLine("The object URL is {0}.", objectUrl);
}
}
catch
{
Console.WriteLine("error....");
}
// Wait for the user prompt.
Console.WriteLine("Press ENTER to exit the server.");
Console.ReadLine();
Console.WriteLine("The server is exiting.");
}
}
- object 소스 예제.(DLL)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace dllobject
{
public class RemoteObject : MarshalByRefObject
{
private int callCount = 0;
public int GetCount()
{
Console.WriteLine("공유 안되구만...");
callCount++;
return (callCount);
}
}
}
좀전에 한 tcp와 비교해서 뭐가 틀린지 분석해 보자.
아 정말 프로세스 통신은 이해가 될까말까 하구만...
'객체지향언어 > C#' 카테고리의 다른 글
DataBase Connect Class (1) | 2009.12.21 |
---|---|
Linq 공부 (0) | 2009.11.26 |
IPC 통신기법 (리모팅을 통한 방법1 TCP이용) (0) | 2009.11.25 |
esCapeCheck 때문에 만들어본 것인데... (0) | 2009.11.25 |
C# 특징을 나름 정리해 본것입니다. (0) | 2009.10.03 |