我认为这是一个简单的.NET Remoting客户端/服务器(代码如下)...在托管应用程序中托管/运行时它可以正常工作,但是当托管在Windows服务中时,所有对代理成员的调用从Activator.GetObject返回的结果是NullReferenceException。
为了简化操作,我将所有这些放在一个控制台中,它工作正常...创建了一个基本的Windows服务并在OnStart方法上放置了相同的代码,一旦我访问“TheString”属性,我得到一个NullReferenceException。 / p>
我可以确认没有其他例外,端口可用,服务以管理员身份运行。另外,我的解决方案需要一个单例,这就是我使用它的原因。
目前这是托管在Windows 7上的,这可能是一个因素。如果我可以学习如何看到更多潜在错误可能导致这种情况,我或许能够弄明白......我怎样才能看到下面可能发生的事情(例如,sink,formatter等等)?
服务器代码:
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; }
}
任何想法都会受到赞赏。
答案 0 :(得分:0)
事实证明,限制涉及远程处理引擎无法序列化和代理接口类型,虽然这不是我的样本(对不起)的一部分,但最终是问题的根源。