2014-01-17 18 views
0

爲了掩蓋原因,我需要從服務本身內部連接到.NET遠程服務。連接到服務與.NET遠程服務

澄清: 有連接到服務的客戶端應用程序:

IEngine engine = (IEngine)Activator.GetObject(typeof(IEngine), "tcp://169.18.1.100:1966/Engine"); 

當某個呼叫到它加載與計算一些插件DLL一個AppDomain的服務進行。但是現在這個dll需要調用它嵌入的服務中的函數,並且它不能直接調用它們,因爲它存在於它自己的AppDomain中。

所以我可以從AppDomain中調用它嗎?

RemotingServices.Marshal(this, engineUri); 

它至少一個電話,但也許有螺紋和IEngine或其他問題的發佈工作考慮:

IEngine engine = (IEngine)Activator.GetObject(typeof(IEngine), "tcp://localhost:1966/Engine"); 

的對象與公佈?

我希望它很清楚。

+1

配置爲單呼叫或單身的對象? –

+0

該對象與RemotingServices.Marshal(this,engineUri)發佈,所以我猜它像一個singleton – Laurijssen

回答

1

如果您存儲傳遞給RemotingServices.MarshalIEngine的實例,則您不需要從服務本身中調用Activator.GetObject,因爲它將與客戶端應用程序使用的實例相同。它可能會需要一些重整架構,但它會從你的服務中保存到IEngine任何電話會通過網絡堆棧:

IEngine this.engine = new Engine(); 
RemotingServices.Marshal(this.engine, engineUri); 

// this.engine will be the same instance used by client applications and can also be passed around within your service. 
+0

它聽起來不錯,但是在將它放入組裝類的構造函數後,每次調用都返回null,因爲在方法內部使用了ConfigurationManager設置。我會堅持使用Activator.GetObject,並在出現問題時解決性能問題 – Laurijssen