Невозможно получить доступ к элементам удаленного взаимодействия при размещении в Windows Service - PullRequest
0 голосов
/ 10 мая 2010

У меня есть то, что я считал простым клиентом / сервером .NET Remoting (код ниже) ... При размещении / запуске в консольном приложении все работает нормально, но при размещении в службе Windows все вызовы для членов прокси возвращается из Activator.GetObject результат в NullReferenceException.

Чтобы упростить вещи, я поместил все это в единую консоль, и она работала нормально ... Создал базовую службу Windows и поместил тот же код в метод OnStart, и как только я получил доступ к свойству TheString, я получил исключение NullReferenceException.

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

В настоящее время это происходит на Windows 7, что может быть фактором. Если бы я мог узнать, как узнать, какая из лежащих в основе ошибок может быть причиной этого, я смогу это выяснить ... Как я могу увидеть, что может происходить внизу (например, сток, форматтер и т. Д.)?

Код сервера:

var provider = new BinaryServerFormatterSinkProvider
{
    TypeFilterLevel = TypeFilterLevel.Full
};

IDictionary properties = new Hashtable();
properties["port"] = 20001;
properties["exclusiveAddressUse"] = false;

_channel = new TcpChannel(properties, null, provider);

ChannelServices.RegisterChannel(_channel, false);

RemotingConfiguration.RegisterWellKnownServiceType(typeof(HostClass), "TheHost", WellKnownObjectMode.Singleton);

Код клиента:

var retInstance = (HostClass)Activator.GetObject(typeof(HostClass),
    string.Format("tcp://{0}:{1}/TheHost", "MyHostName", 20001));

string host = retInstance.TheString; //This is where the NullReference is experienced

Удаленный объект:

public class HostClass : MarshalByRefObject, IHostClass
{
    public HostClass()
    {
      TheString = "Hello World";
    }

    public override object InitializeLifetimeService()
    {
        return null;
    }

    public string TheString { get; set; }
}

Любые идеи приветствуются.

1 Ответ

0 голосов
/ 13 мая 2010

Как выяснилось, ограничение касается неспособности механизмов удаленного взаимодействия сериализовать и прокси-интерфейсов, которые хотя и не были частью моего примера (извините), в конечном счете, были причиной проблемы.

...