Я разрабатываю приложение, которое использует WindowsFormsApplicationBase для принудительного применения единого экземпляра. Я получаю следующую ошибку при вызове метода на удаленном объекте. Это работает нормально, если я не использую подход единственного экземпляра.
System.Runtime.Remoting.RemotingException: Ошибка аутентификации ---> System.IO.IOException: Невозможно прочитать данные из транспортного соединения: Соединение было закрыто.
в System.Net.Security.NegoState.ProcessAuthentication (LazyAsyncResult lazyResult)
в System.Net.Security.NegotiateStream.AuthenticateAsClient (учетные данные NetworkCredential, String targetName, ProtectionLevel requiredProtectionLevel, TokenImpersonationLevel allowImpersonationLevel)
at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.CreateAuthenticatedStream (Поток netStream, String machinePortAndSid)
Вот мой код:
public class EntryPoint
{
[STAThread]
public static void Main(string[] args)
{
SingleInstanceManager sim = new SingleInstanceManager();
sim.Run(args);
}
}
public class SingleInstanceManager : WindowsFormsApplicationBase
{
private App app;
public SingleInstanceManager()
{
IsSingleInstance = true;
}
protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs eventArgs)
{
app = new App();
app.InitializeComponent();
app.Run();
return false;
}
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
{
base.OnStartupNextInstance(eventArgs);
app.Activate();
}
}
Вот так я вызываю объект Remoting:
public Hashtable GetData(string[] arg1, string[] arg2)
{
IDataProvider dataProvider = (IDataProvider )Activator.GetObject(typeof(IDataProvider ), "tcp://.....");
Hashtable data = dataProvider.GetData(arg1, arg2);
return data;
}
Заранее спасибо.