Remoting client’ları da aynen Remoting server’larında olduÄŸu gibi, gerekli configuration dosyalarını okumaları saÄŸlanarak da configure edilebilirler (ör: machine.config).
Yeni bir Visual Studio projesi oluÅŸturup, proje tipi olarak “Console Application” seçeneÄŸini seçelim ve proje ismini de “ConfigCliAppConfigFile” olarak verelim. Solution içerisine “Class Library” tipinde yeni bir proje daha ekleyelim. Bu class library projesinin ismini “ConfigCliAppCFile.RemObjects” olarak verelim. OluÅŸturduÄŸumuz class library projesine “Configure a Server Application Programmaticaly” baÅŸlığı altında yaptığımız örnekte kullandığımız “MyRemotableObject” class’ını birebir olarak ekleyelim.
“ConfigCliAppCFile.RemObjects” projesini “ConfigCliAppConfigFile” projesine referans olarak ekledikten sonra console application projemize yeni bir configuration dosyası ekleyerek ismini “ConfigCliAppConfigFile.exe.config” olarak deÄŸiÅŸtirelim. Bu dosya içeriÄŸini de aÅŸağıdaki ÅŸekilde deÄŸiÅŸtirelim.
ConfigCliAppConfigFile.exe.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp" port="0">
<serverProviders>
<formatter ref="soap"/>
</serverProviders>
</channel>
</channels>
<client>
<wellknown
type="ConfigCliAppCFile.RemObjects.MyRemotableObject, ConfigSerAppCFile.RemObjects"
url="http://localhost:1234/MyRemotableType.rem"
/>
</client>
</application>
</system.runtime.remoting>
</configuration>
Yukarıdaki kodlarda görmüş olduÄŸunuz gibi Remoting client uygulamasını aynen Remoting server’ı configuration file’dan yapmış olduÄŸumuz gibi configure edebiliyoruz.
Bu noktada dikkat edilmesi gereken en önemli nokta <application> node’u altındaki <service> node’unun artık <client> olarak kullanılıyor olması. Bu deÄŸiÅŸikliÄŸi yapmak zorunda olmamızın sebebi bir Remoting server yerine Remoting client configure ediyor olmamız. Ayrıca, <wellknown> node’unun attribute’lerinden olan objectUri attribute’unun de url olarak deÄŸiÅŸtirilmelidir çünkü Remoting server’ın host ettiÄŸi object’in hangi URL’de olduÄŸunu Remoting client ancak bu ÅŸekilde bilebilir.
Son olarak da uygulamamızı tanımlamış olduÄŸumuz configuration dosyasını okuyacak ve Remoting configuration’ını kendi kendine yapacak ÅŸekile getirelim.
RemotingClient.cs
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace ConfigCliAppConfigFile
{
public class RemotingClient
{
static void Main(string[] args)
{
RemotingConfiguration.Configure("../../ConfigCliAppConfigFile.exe.config", false);
TcpChannel tcpChannel = ChannelServices.RegisteredChannels[0] as TcpChannel;
if (tcpChannel == null)
{
Console.WriteLine("Invalid configuration file...");
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();
}
WellKnownClientTypeEntry[] registeredWellKnownClientTypes = RemotingConfiguration.GetRegisteredWellKnownClientTypes();
foreach (WellKnownClientTypeEntry type in registeredWellKnownClientTypes)
{
Console.WriteLine("{0} is registered.", type.TypeName);
}
Console.WriteLine("I am now connected to the Remoting server...");
Console.WriteLine("Press Enter to exit.");
Console.ReadLine();
}
}
}
Yazmış olduğumuz kodları sırasıyla şu şekilde açıklayalım.
- RemotingConfiguration class’ının sahip olduÄŸu static olarak iÅŸaretlenmiÅŸ Configure method’unu kullanarak configuration bilgilerimizi barındıran configuration dosyasını okumasını ve Remoting configuration’ını bu dosyadaki bilgiler doÄŸrultusunda yapmasını saÄŸladık.
- Remoting configuration’ı içerisinde “WellKnownClient” olarak register edilmiÅŸ olan remotable type’ları registeredWellKnownClientTypes deÄŸiÅŸkenine atadık.
- registeredWellKnownClientTypes deÄŸiÅŸkenini foreach döngüsü içerisine alarak register edilmiÅŸ object’lerin TypeName bilgilerini ekrana, sadece bilgi amaçlı olarak, yazdırdık..
Visual Studio üzerinde uygulamayı çalıştırdığımızda karşımıza aşağıdaki ekran gelir:
![]()
RemotingClient class’ı içerisinde kullandığımız bazı method’lar ve görevleri aÅŸağıdaki gibidir.
| Method
|
Görev |
| RemotingConfiguration.GetRegisteredWellKnownClientTypes | Configuration dosyasında bulunan <client> nodu’u içerisinde register edilen remotable type’ların listesinin alınabileceÄŸi method’dur. |
UYARI
Remoting uygulamanızın üzerinde çalışacağı port bilgisini yazarken ilgili port’un baÅŸka bir uygulama tarafından kullanılmadığından emin olunuz. ÖrneÄŸin IIS’in 80. port üzerinde çalıştığını düşünürseniz ve siz de uygulamanızı 80. port üzerinden çalışacak ÅŸekilde ayarlarsanız aÅŸağıdaki hata ile karşılaşırsınız:
” System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted “