У меня есть C # dll, который хорошо работает с приложением .NET Framework.Это Dll предоставляет клиент WCF.Проблема в том, что упомянутый клиент не работает как часть Unity приложения.
Я потратил некоторое время, пытаясь понять проблему, и вот что я обнаружил: фабричный CreateChannel()
метод возвращает MarshalByRefObject
вместо __TransparentProxy.
Я использую System.Reflection
, чтобы получить свойства удаленного объекта и вызвать их.Этот подход прекрасно работает для __TransparentProxy.И это не работает вообще для MarshalByRefObject
экземпляра.__TransparentProxy имеет все те же свойства, что и удаленный объект.С другой стороны, экземпляр MarshalByRefObject
не имеет ни одного из этих свойств.
Что я могу сделать в этой ситуации?
ОБНОВЛЕНИЕ:
Вот пример кода
NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);
object[] parameters = new object[]
{
binding,
new EndpointAddress("net.tcp://127.0.0.1:1234/ICP01")
};
Type factoryType = typeof(ChannelFactory<>).MakeGenericType(typeof(IICP01Remote));
ChannelFactory<IICP01Remote> factory = (ChannelFactory<IICP01Remote>)Activator.CreateInstance(factoryType, parameters);
IICP01Remote remote = factory.CreateChannel();
//remote is MarshalByRefObject not a __TransparentProxy
float result = remote.GetValue(1);
factory.Close();