У меня есть то, что я считал простым клиентом / сервером .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; }
}
Любые идеи приветствуются.