Remoting + Windows Service

 
0
 
.NET
ava
r4g3 | 10.01.2008, 17:48
На сервере висит служба, с remote - объектом (Singleton). При вызове на самом сервере, клиентская программа с ним работает. Но если запустить клиента на удаленной машине (входящей в домен), то клиент не может получить доступа. Файрволла нет.
Comments (13)
ava
mr.DUDA | 10.01.2008, 23:51 #
Покажите конфиги клиента и сервера.
ava
r4g3 | 12.01.2008, 18:13 #
На сервере remoting инициализируется когда происходит старт сервера

protected override void OnStart(string[] args)
{
EventLog.WriteEntry("Remote service: on start");
_channel = new HttpServerChannel(8008);
EventLog.WriteEntry("Remote service: TCP channel started");
ChannelServices.RegisterChannel(_channel,false);
EventLog.WriteEntry("Remote service: Register channel");
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(Transport),
"RemoteService/Transport",
WellKnownObjectMode.Singleton); //2
base.OnStart(args);
EventLog.WriteEntry("Remote service: Leave it");
}


На клиенте

HttpClientChannel channel = new HttpClientChannel();
ChannelServices.RegisterChannel(channel, false);
try
{
Transport rt = (Transport)Activator.GetObject(
typeof(Transport),
"http://192.168.10.19:8008/RemoteService/Transport");
rt.SetCaller(Environment.MachineName);
textBox1.Text += rt.GetCardID().ToString() + System.Environment.NewLine
}
catch (Exception exp)
{
...
}
ChannelServices.UnregisterChannel(channel);
ava
tol05 | 12.01.2008, 19:37 #
а в урле перед IP имя домена писать не нужно?
ava
r4g3 | 13.01.2008, 00:17 #
smile Первый раз о таком слышу! Да и тем более проблема возникает, когда сервер становится сервисом Windows. Когда он работает как обычное приложение, проблем не возникает.
tol05, можете уточнить как это сделать? Предполагаю, что там какой то специальный синтаксис, для вставки имени домена.
ava
tol05 | 13.01.2008, 00:26 #
имя домена (если я не ошибаюсь) пишется как
Transport rt = (Transport)Activator.GetObject(typeof(Transport), "http://MyDomain/192.168.10.19:8008/RemoteService/Transport");

но вот теперь меня насторожила фраза
Цитата (r4g3 @ 12.1.2008, 23:17 findReferencedText)
когда сервер становится сервисом Windows

раньше этой информации не было :)

Под какой учетной записью работает сервис? Есть ли у этой учетной записи права на сетевую работу? Какую пишет ошибку?
ava
r4g3 | 13.01.2008, 00:33 #
Сервис работает вообще при старте Windows, клиент сервера не видит. На учетной записи с правом работы в сети то же самое.

Unable to connect to the remote server
Void HandleReturnMessage(System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Messaging.IMessage)

Server stack trace:
at System.Net.HttpWebRequest.GetRequestStream()
at System.Runtime.Remoting.Channels.Http.HttpClientTransportSink.ProcessAndSend(IMessage msg, ITransportHeaders headers, Stream inputStream)
at System.Runtime.Remoting.Channels.Http.HttpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
at System.Runtime.Remoting.Channels.SoapClientFormatterSink.SyncProcessMessage(IMessage msg)

Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at RemoteService.Transport.SetCaller(String callerName)
at CallRemoteObject.Form1.button1_Click(Object sender, EventArgs e) in E:\Projects\CallRemoteObject\CallRemoteObject\Form1.cs:line 30
ava
r4g3 | 15.01.2008, 12:29 #
Может код инсталятора чуть разяснит ситуацию:

[RunInstallerAttribute(true)]
public class WindowsServiceInstaller : Installer
{
public WindowsServiceInstaller()
{
ServiceProcessInstaller serviceProcessInstaller =
new ServiceProcessInstaller();
ServiceInstaller serviceInstaller = new ServiceInstaller();

serviceProcessInstaller.Account = ServiceAccount.NetworkService;
serviceProcessInstaller.Username = null;
serviceProcessInstaller.Password = null;

serviceInstaller.DisplayName = "My New C# Windows Service 0.9";
serviceInstaller.StartType = ServiceStartMode.Automatic;

serviceInstaller.ServiceName = "My Windows Service";

Installers.Add(serviceProcessInstaller);
Installers.Add(serviceInstaller);
}
ava
tol05 | 15.01.2008, 12:50 #
а если на удаленном компьютере запустить клиента не как службу, а как обычное приложение, под твоей учетной записью? Работает?

Кстати, я тут подумал, поискал в инете, в домене есть прокси-сервер, через который вы все работаете. Почитай это, может поможет smile
ava
r4g3 | 15.01.2008, 12:57 #
Да как обычное приложение работает.

Пошел знакомится с текстом.
ava
r4g3 | 15.01.2008, 17:43 #
По моему это не то. У меня не веб сервис, а виндовая служба с ремоут объектом. Она в сетке на сервере в фоновом режиме работать должна. Брал я вот отсюда, что это можно сделать: http://www.codeproject.com/KB/dotnet/winservicehost.aspx .
Но как то оно не хочет работать со вторым фреймворком.
ava
arilou | 16.01.2008, 12:22 #
r4g3, проблема может быть связана с тем, что сервис работает под не под доменной учетной записью. Попробуй сделать админскую запись, и запускает сервис под ней.
ava
r4g3 | 17.01.2008, 17:23 #
Да если установить на сервер и под учетной записью администратора все заработало.
ava
arilou | 17.01.2008, 17:34 #
r4g3, рад был помочь.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  mr.DUDA   arilou   tol05   r4g3
advanced
Submit