2010-02-18 5 views
0

Я узнаю об использовании Remoting в .NET. Я создал небольшое приложение, которое выполняет основную работу приветствия. код для RemoteObject является:Remoting in C# не работает

public class MyRemoteObjectClass:MarshalByRefObject 
    { 
     public MyRemoteObjectClass() 
     { 
      Console.WriteLine("Remote object created"); 
     } 
     //return message reply 
     public String ReplyMessage(String msg) 
     { 
      Console.WriteLine("Client : " + msg);//print given message on console 
      return "Server : Yeah! I'm here"; 
     } 
    } 

Код для серверного класса является:

class MyServerClass 
    { 
     public MyServerClass() 
     { 
     } 
     static void Main(string[] args) 
     { 
      RemotingConfiguration.Configure("RemotingSettings_Server.xml",false); 
      Console.WriteLine("server activated"); 
      Console.ReadLine(); 
     } 
    } 

Исходный код класса клиента:

class MyClientAppClass 
    { 
     static void Main(string[] args) 
     { 
      RemotingConfiguration.Configure("ClientSettings.xml",false); 
      Console.WriteLine("Settings read successfully"); 
      MyRemoteObjectClass remObject = (MyRemoteObjectClass)Activator.GetObject(typeof(MyRemoteObject.MyRemoteObjectClass),"http://localhost:8989/MyRemoteObjectClass",WellKnownObjectMode.Singleton); 
      if (remObject == null) 
       Console.WriteLine("cannot locate server"); 
      else 
      { String res = remObject.ReplyMessage("You there?"); Console.WriteLine(res); Console.ReadLine(); } 

     } 
    } 

Мои файлы конфигурации для сервера и клиента соответственно:

<configuration> 
    <system.runtime.remoting> 
     <application> 
     <service> 
      <wellknown 
       mode="Singleton" 
       type="MyRemoteObject.MyRemoteObjectClass, MyRemoteObjectClass" 
       objectUri="MyRemoteObjectClass.rem" 
      /> 
     </service> 
     <channels> 
      <channel ref="http" port="8989"/> 
     </channels> 
     </application> 
    </system.runtime.remoting> 
</configuration> 

клиент:

<configuration> 
    <system.runtime.remoting> 
    <application> 
     <client> 
     <wellknown 
      type="MyRemoteObject.MyRemoteObjectClass, MyRemoteObjectClass" 
      url="http://localhost:8989/MyRemoteObjectClass.rem" 
      /> 
     </client> 
    </application> 
    </system.runtime.remoting> 
</configuration> 

Я первый построил DLL для удаленного объекта, скопировали DLL в обоих серверных и клиентских ехе местах. Затем я запустил сервер, а затем запустил клиент. Сервер создается, но клиентская программа содержит исключение, в котором говорится: «Удаление исключений: запрошенный сервис не найден».

Пожалуйста, помогите мне решить эту проблему и, возможно, это хорошее место, чтобы четко понять концепцию дистанционного управления.

Thanks, Rakesh.

+1

Remoting безумно сложно и заведомо плохо документировано. Пропустите удаленный доступ и перейдите непосредственно в WCF. – Will

ответ

0

Проверьте конфигурационный файл - он чувствителен к регистру. «objecturi» должен быть, например, «objectUri».

+0

Привет, Алон, я добавил свои файлы конфигурации и к моему вопросу. Кажется правильным, как вы сказали. –

0

Деактивируйте брандмауэр. Если он затем работает, активируйте брандмауэр и добавьте соответствующее исключение.