我有我認爲是一個簡單的.NET Remoting客戶端/服務器(代碼如下)......當在控制檯應用程序中託管/運行時,它工作正常,但託管在Windows服務中,對從Activator.GetObject返回的代理成員的所有調用都會導致NullReferenceException。當在Windows服務中託管時無法訪問Remoting對象成員
爲了簡化事情,我將所有這些放在一個控制檯中,並且工作正常......創建一個基本的Windows服務,並將相同的代碼放在OnStart方法上,一旦我訪問「TheString」屬性,就會得到一個NullReferenceException。
我可以確認沒有其他異常,端口可用,服務以管理員身份運行。另外,我的解決方案將需要一個單例,這就是我使用它的原因。
目前這是託管在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; }
}
任何想法將不勝感激。
我有類似的問題,你的解決方案或解決方法是什麼打架呢? – 2011-12-08 04:31:29
我切換到使用非抽象類型。 – JoeGeeky 2011-12-08 07:50:32