2010-05-10 42 views
0

我有我認爲是一個簡單的.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; } 
} 

任何想法將不勝感激。

回答

0

事實證明的限制涉及遠程處理引擎無法序列化和代理接口類型,而不是我的樣品的一部分(遺憾)中的最終問題的根源。

+0

我有類似的問題,你的解決方案或解決方法是什麼打架呢? – 2011-12-08 04:31:29

+0

我切換到使用非抽象類型。 – JoeGeeky 2011-12-08 07:50:32

相關問題