<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=NobrElosztott_rendszerek_labor_%E2%80%94_Remoting%2Fnobr</id>
	<title>NobrElosztott rendszerek labor — Remoting/nobr - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=NobrElosztott_rendszerek_labor_%E2%80%94_Remoting%2Fnobr"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=NobrElosztott_rendszerek_labor_%E2%80%94_Remoting/nobr&amp;action=history"/>
	<updated>2026-04-20T02:13:46Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=NobrElosztott_rendszerek_labor_%E2%80%94_Remoting/nobr&amp;diff=139001&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoszak|ElosztottLaborRemoting}}   &lt;style&gt; code.pre { white-space:pre; display:block; } &lt;/style&gt;  __TOC__ Lásd még: [[IIRLaborRemoting|Integrált in…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=NobrElosztott_rendszerek_labor_%E2%80%94_Remoting/nobr&amp;diff=139001&amp;oldid=prev"/>
		<updated>2012-10-21T20:30:59Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Infoszak|ElosztottLaborRemoting}}   &amp;lt;style&amp;gt; code.pre { white-space:pre; display:block; } &amp;lt;/style&amp;gt;  __TOC__ Lásd még: [[IIRLaborRemoting|Integrált in…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Infoszak|ElosztottLaborRemoting}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt; code.pre { white-space:pre; display:block; } &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
Lásd még: [[IIRLaborRemoting|Integrált információs rendszerek &amp;amp;mdash; Remoting labor]]&lt;br /&gt;
&lt;br /&gt;
==Szimpla összeadás==&lt;br /&gt;
&lt;br /&gt;
===Előkészületek===&lt;br /&gt;
&lt;br /&gt;
* New Project / Other / Solution: RemotingLab&lt;br /&gt;
* Add project / C# Class Library: Common&lt;br /&gt;
* Add project / C# Console Application: Server&lt;br /&gt;
** Add reference / Projects: Common&lt;br /&gt;
** Add reference / .NET: System.Runtime.Remoting&lt;br /&gt;
* Add project / C# Console Application: Client&lt;br /&gt;
** Add reference / Projects: Common&lt;br /&gt;
** Add reference / .NET: System.Runtime.Remoting&lt;br /&gt;
* Solution / Properties / Startup Project: Multiple, 1. Server, 2. Client, mindkettő Start&lt;br /&gt;
&lt;br /&gt;
===Common / Class1.cs===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
namespace Common&lt;br /&gt;
{&lt;br /&gt;
	 public interface IBusinessLogic {&lt;br /&gt;
		  int Add(int a, int b);&lt;br /&gt;
	 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Server / Program.cs===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
namespace Server&lt;br /&gt;
{&lt;br /&gt;
	 class BusinessLogic : MarshalByRefObject, IBusinessLogic&lt;br /&gt;
	 {&lt;br /&gt;
		  public int Add(int a, int b) {&lt;br /&gt;
				return a + b;&lt;br /&gt;
		  }&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
	 class Program&lt;br /&gt;
	 {&lt;br /&gt;
		  static void Main(string[] args) {&lt;br /&gt;
				TcpChannel channel = new TcpChannel(9000);&lt;br /&gt;
				ChannelServices.RegisterChannel(channel, false);&lt;br /&gt;
				// SingleCall: minden híváskor új objektum példány jön létre, ami a hívás végén megszűnik&lt;br /&gt;
				RemotingConfiguration.RegisterWellKnownServiceType(&lt;br /&gt;
					 typeof(BusinessLogic), &amp;quot;IBusinessLogic&amp;quot;, WellKnownObjectMode.SingleCall);&lt;br /&gt;
				// A szerver csak addig tud aktiválni, amíg fut&lt;br /&gt;
				Console.ReadLine();&lt;br /&gt;
		  }&lt;br /&gt;
	 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Client / Program.cs===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static void Main(string[] args) {&lt;br /&gt;
	 IBusinessLogic ibl = (IBusinessLogic)Activator.&lt;br /&gt;
		  GetObject(typeof(IBusinessLogic), &amp;quot;tcp://localhost:9000/IBusinessLogic&amp;quot;);&lt;br /&gt;
	 Console.WriteLine(ibl.Add(10, 3));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Chat==&lt;br /&gt;
&lt;br /&gt;
===Common / Class1.cs===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
namespace Common&lt;br /&gt;
{&lt;br /&gt;
	 public interface IChatClient {&lt;br /&gt;
		  // OneWay: aszinkron hívás&lt;br /&gt;
		  [OneWay]&lt;br /&gt;
		  void Show(string name, string message);&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
	 public interface IChatServer {&lt;br /&gt;
		  void LogIn(string name, IChatClient client);&lt;br /&gt;
		  void LogOut(string name);&lt;br /&gt;
		  void Send(string name, string message);&lt;br /&gt;
	 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Server / Program.cs===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
namespace Server&lt;br /&gt;
{&lt;br /&gt;
	 class ChatServer: MarshalByRefObject, IChatServer&lt;br /&gt;
	 {&lt;br /&gt;
		  Dictionary&amp;lt;string, IChatClient&amp;gt; clients = new Dictionary&amp;lt;string, IChatClient&amp;gt;();&lt;br /&gt;
		  ReaderWriterLock rwl = new ReaderWriterLock();&lt;br /&gt;
&lt;br /&gt;
		  public void LogIn(string name, IChatClient client)&lt;br /&gt;
		  {&lt;br /&gt;
				rwl.AcquireWriterLock(100);&lt;br /&gt;
				clients[name] = client;&lt;br /&gt;
				rwl.ReleaseLock();&lt;br /&gt;
		  }&lt;br /&gt;
&lt;br /&gt;
		  public void LogOut(string name)&lt;br /&gt;
		  {&lt;br /&gt;
				rwl.AcquireWriterLock(100);&lt;br /&gt;
				clients.Remove(name);&lt;br /&gt;
				rwl.ReleaseLock();&lt;br /&gt;
		  }&lt;br /&gt;
&lt;br /&gt;
		  public void Send(string name, string message)&lt;br /&gt;
		  {&lt;br /&gt;
				rwl.AcquireReaderLock(100);&lt;br /&gt;
				foreach (string key in clients.Keys)&lt;br /&gt;
					 if (key != name)&lt;br /&gt;
						  clients[key].Show(name, message);&lt;br /&gt;
				rwl.ReleaseLock();&lt;br /&gt;
		  }&lt;br /&gt;
&lt;br /&gt;
		  // a szerver akkor se szűnjön meg, ha sokáig nem érkezik kérés&lt;br /&gt;
		  public override object InitializeLifetimeService()&lt;br /&gt;
		  {&lt;br /&gt;
				return null;&lt;br /&gt;
		  }&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
	 class Program&lt;br /&gt;
	 {&lt;br /&gt;
		  static void Main(string[] args) {&lt;br /&gt;
				// callback engedélyezése&lt;br /&gt;
				BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();&lt;br /&gt;
				provider.TypeFilterLevel = TypeFilterLevel.Full;&lt;br /&gt;
				IDictionary props = new Hashtable();&lt;br /&gt;
				props[&amp;quot;port&amp;quot;] = 9000;&lt;br /&gt;
&lt;br /&gt;
				TcpChannel channel = new TcpChannel(props, null, provider);&lt;br /&gt;
				ChannelServices.RegisterChannel(channel);&lt;br /&gt;
				// Singleton: egy példány jön létre és megtartja az állapotát a hívások között&lt;br /&gt;
				RemotingConfiguration.RegisterWellKnownServiceType(&lt;br /&gt;
					 typeof(ChatServer), &amp;quot;IChatServer&amp;quot;, WellKnownObjectMode.Singleton);&lt;br /&gt;
				// A szerver csak addig tud aktiválni, amíg fut&lt;br /&gt;
				Console.ReadLine();&lt;br /&gt;
		  }&lt;br /&gt;
	 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Client / Program.cs===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
namespace Client&lt;br /&gt;
{&lt;br /&gt;
	 class ChatClient : MarshalByRefObject, IChatClient&lt;br /&gt;
	 {&lt;br /&gt;
		  public void Show(string name, string message) {&lt;br /&gt;
				Console.WriteLine(&amp;quot;{0} : {1}&amp;quot;, name, message);&lt;br /&gt;
		  }&lt;br /&gt;
&lt;br /&gt;
		  // a kliens akkor se szűnjön meg, ha sokáig nem érkezik kérés&lt;br /&gt;
		  public override object InitializeLifetimeService() {&lt;br /&gt;
				return null;&lt;br /&gt;
		  }&lt;br /&gt;
	 }&lt;br /&gt;
&lt;br /&gt;
	 class Program&lt;br /&gt;
	 {&lt;br /&gt;
		  static void Main(string[] args) {&lt;br /&gt;
				// A kliens a szerverrel felépített TCP kapcsolaton keresztül hívható&lt;br /&gt;
				TcpChannel channel = new TcpChannel(0);&lt;br /&gt;
				ChannelServices.RegisterChannel(channel);&lt;br /&gt;
&lt;br /&gt;
				IChatServer ics = (IChatServer)Activator.&lt;br /&gt;
					 GetObject(typeof(IChatServer), &amp;quot;tcp://lab52000:9000/IChatServer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
				ics.LogIn(args[0], new ChatClient());&lt;br /&gt;
				for (string msg = &amp;quot;&amp;quot;; msg != &amp;quot;bye&amp;quot;; )&lt;br /&gt;
					 ics.Send(args[0], msg = Console.ReadLine());&lt;br /&gt;
				ics.LogOut(args[0]);&lt;br /&gt;
		  }&lt;br /&gt;
	 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- [[PallosPeter|Peti]] - 2006.04.21.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Infoszak]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>