Makale numarası: 818780 - Son Gözden Geçirme: 28 Ağustos 2007 Salı - Gözden geçirme: 3.5

Visual C++ .NET veya Visual C++ 2005 kullanarak bir uzak sunucu oluşturma hakkında

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.

Bu Sayfada

Hepsini aç | Hepsini kapa

Özet

Bu adım adım makalede, başka bir uygulama, basit, uzak bir sunucu nasıl oluşturulacağını açıklar. Sunucuya erişen bir uygulama, aynı bilgisayardaki farklı bir bilgisayarda veya farklı bir ağ üzerinde bulunabilir. Uzak sunucu iki bölüme ayrılmıştır:
  • Sunucu nesnesi
  • Sunucu uygulaması
Sunucu nesnesi, istemci ile iletişim kuran nesne, sunucu uygulaması, sunucu nesnesi ile .NET Framework remoting kaydetmek için kullanılır.


Daha fazla bilgi

Gereksinimler

Aşağıdaki listede önerilen donanım, yazılım, ağ altyapısı ve gereken hizmet paketleri önerilmektedir:
  • Microsoft Visual Studio .NET veya Microsoft Visual Studio 2005
  • Microsoft .NET Framework
Bu makalede, aşağıdaki konularda bilgi sahibi olduğunuz varsayılmaktadır:
  • Microsoft Visual Studio .NET veya Microsoft Visual Studio 2005
  • Microsoft Visual C++ .NET veya Microsoft Visual C++ 2005
  • Ağ bağlantısı

Uzak sunucu nesnesi oluşturma

Sunucu uygulaması oluşturmak için <a0></a0>, önce bir sunucu nesnesi oluşturmanız gerekir. Sunucu ne istemci uygulaması başlatır ve sonra sunucu bilgisayar ile iletişim kurmak için kullandığı nesnedir. Istemci uygulaması, istemci üzerinde oluşturulan bir proxy nesnesi yoluyla bunu yapar. Bu örnekte, sunucu nesnesi sınıf kitaplığı (.dll) bulunan ve myRemoteClass olarak adlandırılır.
  1. Bir yeni yönetilen C++ sınıf kitaplığı, Visual C++ .NET veya Visual C++ 2005 oluşturun. ServerClass projenin adı. Varsayılan olarak, Class1 oluşturulur.
  2. ServerClass.h açın ve Class1myRemoteClass için yeniden adlandırın.

    Yeniden adlandırılan olarak myRemoteClassMarshalByRefObject sınıfından gerekir. Sınıfınızın şu şekilde görünür:
    namespace ServerClass
    {
      public __gc class myRemoteClass: public MarshalByRefObject
      {
        public:
        myRemoteClass()
        {
        }
      };
    }
    
    common language runtime eklemeniz gerekir Not desteği derleyici seçeneği (/ clr:oldSyntax) başarıyla önceki kod örneğini derlemek için Visual C++ 2005'te. Visual C++ 2005'te ortak dil çalışma zamanı destek derleyici seçeneği eklemek için aşağıdaki adımları izleyin:
    1. Project tıklatın ve sonra <ProjectName> Özellikleri.

      Not<ProjectName> projenin adı için yer tutucudur.
    2. Yapılandırma özellikleri ' ni genişletin ve sonra Genel ' i tıklatın.
    3. Seçmek için tıklatın ortak dil çalışma zamanı modülü ve Destek, eski sözdizimi (/ clr:oldSyntax)Common Language Runtime desteği proje ayarında sağ bölmede, Uygula ' yı tıklatın ve sonra Tamam ' ı tıklatın.
    Ortak dil çalıştırma hakkında daha fazla bilgi için derleyici seçeneği destekleyen, aşağıdaki Microsoft Web sitesini ziyaret edin:
    / clr (ortak dil çalışma zamanı derleme)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx (http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx)
  3. Olan bir dize al?r, konsola dize değeri olan bir ileti görüntüler ve dize boş değilse, doğru verir myRemoteClass için genel bir yöntem eklemek.
    bool SetString(String* sTemp)
    {
      try
      {
        Console::WriteLine("This string '{0}' has a length of {1}", sTemp, (sTemp->get_Length()).ToString());
        return (sTemp->get_Length() != 0? true:false) ;
      }
      catch(Exception* ex)
      {
        Console::WriteLine(ex->Message);
        return false;
      }
    }
    
  4. Proje ServerClass.dll derleme oluşturun.
  5. Kaydedin ve sonra projeyi kapatın.

Uzak sunucu uygulaması oluştur

Bu nesne, istemci ile iletişim kuran sunucu nesnesi oluşturduktan sonra .NET Framework remoting ile kaydettirin. Nesneyi kaydettiğinizde, gerekir da sunucu başlatın ve sonra sunucunun bağlantı noktası bu bağlantı noktasına bağlanmak istemcileri için dinlediği emin olun. Bunu yapmak için <a0></a0>, bir yürütülebilir dosyaya verir, bir proje türü kullanmanız gerekir.

Sunucu nesnesi ayrı bir projede ekleyin; böylece, sunucu nesnesini istemci projeden kolayca başvuruda bulunabilir. Bu projede sunucu nesnesi eklerseniz, başvurular yalnızca .dll dosyaları için ayarlanmış olabilir, çünkü başvuruda bulunamaz.
  1. Visual C++ .NET veya bir yeni CLR Console uzak sunucuyu başlatmak için Application Visual C++ 2005'te, yeni bir konsol uygulaması) projesi oluşturun. ServerObjectRef projenin adı.
  2. ServerObjectRef.cpp kod dosyasını açın. Sistem ad alanına başvuru ve System.Runtime.Remoting ad alanını projeye eklemek için şu kodu kullanın:
    #using <System.Dll>
    #using <System.Runtime.Remoting.Dll>
  3. Önceki bölümde oluşturduğunuz ServerClass.dll derlemesine eklemek için şu kodu kullanın: <a1>
    #using <ServerClass.dll>
    Not derleme, arama yolu belirlemek için şu adımları izleyin:
    1. Projenin Özellik sayfaları iletişim kutusunu açın.
    2. C/C++ klasörü açın.
    3. Genel sekmesini tıklatın.
    4. # Başvurular kullanarak Çözümle özelliğine ServerClass.dll derleme bulunduğu klasörü değiştirin.
  4. Kodunuzu daha sonra bu ad boşluklarında bildirimlerinde geçerli olması için KULLANARAK ifade Uzak ad, Remoting.Channels ad ve Remoting.Channels.TCP ad alanı'nı kullanın. Önce tüm diğer bildirimlerden.
    using namespace System::Runtime;
    using namespace System::Runtime::Remoting;
    using namespace System::Runtime::Remoting::Channels;
    using namespace System::Runtime::Remoting::Channels::Tcp;
    
    KULLANARAK deyimini kullanmanız gerekir
  5. Uygun değişken bildirin. Bildirir ve sonra da belirli bir bağlantı noktasına bağlanmak istemcileri için dinlediği bir TcpChannel nesnesi başlatılamıyor. Bu örnekte, bağlantı noktası 8085'dir. Kanal, Kanal Hizmetleri ile kaydetmek için RegisterChannel yöntemini kullanın. Ana işlevi aşağıdaki bildirim kodu ekleyin:
    TcpChannel* chan = new TcpChannel(8085);
    ChannelServices::RegisterChannel(chan);
    
  6. .NET Framework remoting ile ServerClass nesneyi kaydetmek için RemotingConfiguration nesnesinin RegisterWellKnownServiceType yöntemini çağırın. Aşağıdaki parametreleri belirtin:
    • Iyi bilinen bir tür olarak kayıtlı olan nesne türünü belirtin. Bu örnekte __typeof anahtar türü ServerClass.myRemoteClass almak için kullanılır.
    • Son nokta RemoteTest nesne yayımlanacak adı. Istemciler, bu ad, nesneye bağlanmak için bilmeniz gerekir.
    • Son parametre olarak belirtmekte SingleCall nesne modu kullanın. Nesne modu, sunucu üzerinde etkinleştirildiğinde nesnesinin yaşam süresini belirtir. Bir SingleCall nesnesi kullanıldığında, aynı istemciden birden çok kez aynı yöntemi çağırır bile sınıfının yeni bir örneğini sağlayan bir istemci, her arama için oluşturulur. Tersi durumda, Singleton nesneleri, yalnızca bir kez oluşturulur ve tüm istemciler aynı. ile iletişim
      Type * objType = __typeof(ServerClass);
      RemotingConfiguration::RegisterWellKnownServiceType( objType, 
      	"RemoteTest", 
      	WellKnownObjectMode::SingleCall);
      
  7. Sunucu uygulaması çalışmaya tutmak için <a0>Konsol</a0> nesnesinin ReadLine yöntemini kullanın.
    System::Console::WriteLine("Hit <enter> to exit...");
    System::Console::ReadLine();
    
  8. Projenizi oluşturun.
  9. Kaydedin ve sonra projeyi kapatın.

Sunucu nesnesi sınayın.

Sunucu nesnesi ile iletişim kuran bir istemci uygulamasını oluşturma hakkında ek bilgi için yeni oluşturulan, Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
818781  (http://support.microsoft.com/kb/818781/ ) NASıL YAPıLıR: Visual C++ .NET kullanarak uzak bir sunucuya istemci erişimini oluştur.

Referanslar

Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
818062  (http://support.microsoft.com/kb/818062/ ) NASıL YAPıLıR: Visual C++ .NET kullanarak bir uzak sunucuda bir nesneye başvuruya göre sıralama
TCPChannel sınıfı ve RegisterWellKnownServiceType yöntem hakkında ek bilgi için aşağıdaki MSDN Web sitelerini ziyaret edin:
TcpChannel sınıfı
http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.channels.tcp.tcpchannel(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.channels.tcp.tcpchannel(vs.71).aspx)
RemotingConfiguration.RegisterWellKnownServiceType yöntemi
http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.remotingconfiguration.registerwellknownservicetype(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.remotingconfiguration.registerwellknownservicetype(vs.71).aspx)

Quickstart öğreticiler hakkında ek bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
Microsoft .NET framework SDK QuickStart öğreticiler
http://quickstarts.asp.net/QuickStartv20/default.aspx (http://quickstarts.asp.net/QuickStartv20/default.aspx)
Uzak hakkında ek bilgi için bkz: Microsoft .NET Framework Developer's Guide belgeleri.


Bu makaledeki bilginin uygulandığı durum:
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbmt kbtunneling kbchannels kbhowtomaster kbhowto KB818780 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:818780  (http://support.microsoft.com/kb/818780/en-us/ )