Конференция ".Net" » RemotingConfiguration 2 [C#, WinXP]
 
  • TRUF (01.03.07 08:22) [0]
    Есть Wellknown Singletion service, запускаемый со следующим конфигом:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     <system.runtime.remoting>
      <application>

           <lifetime
            leaseTime="10M"
            sponsorshipTimeOut="2M"
            renewOnCallTime="2M"
            leaseManagerPollTime="10S"
           />

           <service>
       <wellknown mode="Singleton"
           type="MTESRLServer, MTESRL_Server"
              objectUri="MTESRLServerURI.rem"/>
         </service>

           <channels>
             <channel ref="http" port="20000">
             </channel>

           </channels>

         </application>
     </system.runtime.remoting>
    </configuration>



    И есть клиент, который работает с ним, будучи зарегистрированным так (создавал объект просто через new):

    try
               {//
                    //Регистрация канала.
                   IDictionary props = new Hashtable();
                   props["typeFilterLevel"] = "Full";
                   props["port"] = "0";
                   BinaryServerFormatterSinkProvider SformatterProvider = new BinaryServerFormatterSinkProvider(props, null);
                   BinaryClientFormatterSinkProvider CformatterProvider = new BinaryClientFormatterSinkProvider(props, null);

                   HttpChannel h = new HttpChannel(props, CformatterProvider, SformatterProvider);
                   ChannelServices.RegisterChannel(h, false);
               }
               catch { }
               // Регистрация общеизвестного типа.

               try
               {
                   WellKnownClientTypeEntry remotetype =
                   new WellKnownClientTypeEntry(typeof(MTESRLServer),
                   http://localhost:20000/MTESRLServerURI.rem);
                   RemotingConfiguration.RegisterWellKnownClientType(remotetype);
               }
               catch { }

    И не работает со следующим конфигом:



    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <system.runtime.remoting>
     <application>
     
     <client>  
      <wellknown
      type="MTESRLServer, MTESRL_Server"  
      url="http://localhost:20000/MTESRLServerURI.rem" />
     </client>

         <channels>
           <channel ref="http client" port="0">
           </channel>
         </channels>



       </application>
    </system.runtime.remoting>
    </configuration>

    Вся беда в том, что по видимому создавать клиентский объект через new нельзя - создается локальный экземпляр, необходимо использовать Activator.GetObject(). А ему в качестве параметра передается тип.

    Так вот тип серверного объекта через Type.GetType("MTESRL_Server.MTESRLServer") или Type.GetType("MTESRLServer") мне получить не удалось - возвращает null.

    А если:

    foreach (WellKnownClientTypeEntry W in RemotingConfiguration.GetRegisteredWellKnownClientTypes())
                   if (W.TypeName == "MTESRLServer")
                   {
                       t = W.ObjectType;
                       url = W.ObjectUrl;
                       break;
                   }



    то t опять null, хотя url - правильный.



    Получается только так:



    MTESRLServer m = new MTESRLServer(); //Здесь объект локальный
    t = m.GetType();
    m = (MTESRLServer)Activator.GetObject(t, url); // А здесь уже transparent proxy

    Что за #$@% и как быть? Не хочу создовать локальный объект перед его remote аналогом.
 
Конференция ".Net" » RemotingConfiguration 2 [C#, WinXP]
Есть новые Нет новых   [134428   +39][b:0][p:0]