간단한 .NET Remoting Client/Server (Code Below)라고 생각했던 것이 있습니다 ... 콘솔 응용 프로그램에서 호스팅/실행할 때 제대로 작동하지만 호스팅 할 때 Windows 서비스에서 Activator.GetObject에서 반환 된 프록시 멤버에 대한 모든 호출은 NullReferenceException을 발생시킵니다.Windows 서비스에서 호스팅 할 때 원격 객체 구성원에 액세스 할 수 없습니다.
단순화하기 위해이 모든 것을 하나의 콘솔에두고 잘 작동했습니다 ... 기본 Windows 서비스를 만들고 OnStart 메서드에 동일한 코드를 배치하고 "TheString"속성에 액세스하면 NullReferenceException이 발생합니다.
다른 예외가없고 포트를 사용할 수 있으며 서비스가 관리자 권한으로 실행되는지 확인할 수 있습니다. 또한, 내 솔루션은 왜 내가 그것을 사용하는 싱글 톤이 필요합니다.
현재이 요소는 Windows 7에서 호스팅되고 있습니다. 기본 오류가 원인 일 수있는 방법을 더 배우는 방법을 배울 수 있다면 알아낼 수 있습니다. 아래에서 일어날 수있는 일을 어떻게 볼 수 있습니까 (예 : 싱크대, 포맷터 등)?
서버 코드 :
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; }
}
어떤 아이디어 감사하겠습니다.
나는 비슷한 문제가있다. 그 해결책이나 해결 방법은 무엇인가? –
비 추상적 유형을 사용하도록 전환했습니다. – JoeGeeky