Немогу активировать объект
От: Zergling The Zerg Украина  
Дата: 15.01.06 16:46
Оценка:
Проблема такова:
запущены 2 сервиса, общаются с помощью IPC
на одном запущен сервер:

RemotingConfiguration.ApplicationName = "Video.Service";
IpcVideoServer = new IpcServerChannel("Video");
ChannelServices.RegisterChannel(IpcVideoServer, true);
RemotingConfiguration.RegisterActivatedServiceType(typeof(VideoBuffer));


а на другом — соединение:

_Buffer = (VideoBuffer)Activator.CreateInstance(typeof(VideoBuffer), null, new object[] { new UrlAttribute("ipc://Video") });


при попытке соединится получаем Exception:

Type:             
    System.Reflection.TargetInvocationException
Message:         
    Exception has been thrown by the target of an invocation.
Source:         
    mscorlib
StackTrace:
    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
   at System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at Bkc.Lpr.Service.VideoGrabber.CreateVideo()
TargetSite:
     System.Object CreateInstance(System.RuntimeType, Boolean, Boolean, Boolean ByRef, System.RuntimeMethodHandle ByRef, Boolean ByRef)
InnerException:
    Type:
        System.Runtime.Remoting.RemotingException
    Message:
         An error occurred while processing the request on the server: System.Security.SecurityException: Не удается открыть маркер безопасности анонимного уровня.

   at System.Security.Principal.WindowsIdentity.GetCurrentInternal(TokenAccessLevels desiredAccess, Boolean threadOnly)
   at System.Security.Principal.WindowsIdentity.GetCurrent()
   at System.Runtime.Remoting.Channels.Ipc.IpcServerTransportSink.ServiceRequest(Object state)
The Zone of the assembly that failed was:
MyComputer
    Source:
         mscorlib
    StackTrace: 
        Server stack trace: 
   at System.Runtime.Remoting.Channels.Ipc.IpcServerHandler.ReadToEndOfHeaders(BaseTransportHeaders headers)
   at System.Runtime.Remoting.Channels.Ipc.IpcClientHandler.ReadHeaders()
   at System.Runtime.Remoting.Channels.Ipc.IpcClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream)
   at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.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 System.Runtime.Remoting.Activation.IActivator.Activate(IConstructionCallMessage msg)
   at System.Runtime.Remoting.Activation.LocalActivator.DoRemoteActivation(IConstructionCallMessage ctorMsg)
   at System.Runtime.Remoting.Activation.LocalActivator.Activate(IConstructionCallMessage ctorMsg)
   at System.Runtime.Remoting.Activation.AppDomainLevelActivator.Activate(IConstructionCallMessage ctorMsg)
   at System.Runtime.Remoting.Messaging.ClientContextTerminatorSink.SyncProcessMessage(IMessage reqMsg)
   at System.Runtime.Remoting.Activation.ActivationServices.Activate(RemotingProxy remProxy, IConstructionCallMessage ctorMsg)
   at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(IMessage reqMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at Video.VideoBuffer..ctor()
    TargetSite:
         Void HandleReturnMessage(System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Messaging.IMessage)


Подскажите что не так и как с этим бороться
[Img Url="http://www.brainbench.com/transcript.jsp?pid=5754032"]http://www.brainbench.com/images/certlogo/color/mastercert/csharp2fundamentals.gif[/Img]
Re: Немогу активировать объект
От: mihailik Украина  
Дата: 15.01.06 21:17
Оценка:
ZTZ> An error occurred while processing the request on the server: System.Security.SecurityException: Не удается открыть маркер безопасности анонимного уровня.

Похоже, косяк с настройками прав.

Наверное, сервера запускаются от имени разных пользователей, и где-то в Windows Policy установлена слишком злая галочка, из-за которой у одного из сервисов нет прав на доступ к Pipe, открытому другим сервисом.
Re[2]: Немогу активировать объект
От: Zergling The Zerg Украина  
Дата: 16.01.06 08:25
Оценка:
Здравствуйте, mihailik, Вы писали:

ZTZ>> An error occurred while processing the request on the server: System.Security.SecurityException: Не удается открыть маркер безопасности анонимного уровня.


M>Похоже, косяк с настройками прав.


M>Наверное, сервера запускаются от имени разных пользователей, и где-то в Windows Policy установлена слишком злая галочка, из-за которой у одного из сервисов нет прав на доступ к Pipe, открытому другим сервисом.


Сервисы запущены под одним и тем-же пользователем.
пробовал разное:
NT AUTHORITY\SYSTEM
.\SERVICE_USER

Пользователя .\SERVICE_USER даже включил во все группы
у пользователя .\SERVICE_USER есть права входа в систему в качестве сервиса и на замену маркера уровня процесса
Только одного непонятно причем тут маркер безопасности анонимного уровня, ведь сервис запускается от имени конкретного пользователя, а не анонимно.
[Img Url="http://www.brainbench.com/transcript.jsp?pid=5754032"]http://www.brainbench.com/images/certlogo/color/mastercert/csharp2fundamentals.gif[/Img]
Re[3]: Немогу активировать объект
От: mihailik Украина  
Дата: 16.01.06 09:47
Оценка:
ZTZ>Только одного непонятно причем тут маркер безопасности анонимного уровня, ведь сервис запускается от имени конкретного пользователя, а не анонимно.

Может, они у тебя в разных Window Station? Например, один помечен как Allow interact with desktop, а другой — нет.
Re[4]: Немогу активировать объект
От: Zergling The Zerg Украина  
Дата: 16.01.06 10:03
Оценка:
Здравствуйте, mihailik, Вы писали:

ZTZ>>Только одного непонятно причем тут маркер безопасности анонимного уровня, ведь сервис запускается от имени конкретного пользователя, а не анонимно.


M>Может, они у тебя в разных Window Station? Например, один помечен как Allow interact with desktop, а другой — нет.


Настройки сервисов идентичны
я даже сделал так:
Сервисы стартуют как Локальная система, а потом с помощью LogonUser и Impersonate работаю дальше.
Проблема осталась.

Если логины разные, то получаем:
Failed to connect to an IPC Port: Отказано в доступе.

ЗЫ:
Сделал сервис логирования который работает сходным образом (соединение под отдельным логином для работы с дэсктопными приложениями) — там все впорядке
[Img Url="http://www.brainbench.com/transcript.jsp?pid=5754032"]http://www.brainbench.com/images/certlogo/color/mastercert/csharp2fundamentals.gif[/Img]
Re[5]: Немогу активировать объект
От: mihailik Украина  
Дата: 16.01.06 10:21
Оценка:
ZTZ>Настройки сервисов идентичны
ZTZ>я даже сделал так

Похоже, нужно оформить минимальный демонстрационный пример, когда это проявляется, и отправлять в Microsoft, пусть что-то решают.

Кстати, а ты на других машинах пробовал? Как насчёт WinXP/2003 — везде проявляется? Service Pack влияет?
Re[6]: Немогу активировать объект
От: Zergling The Zerg Украина  
Дата: 16.01.06 10:31
Оценка: 30 (1)
Здравствуйте, mihailik, Вы писали:

ZTZ>>Настройки сервисов идентичны

ZTZ>>я даже сделал так

M>Похоже, нужно оформить минимальный демонстрационный пример, когда это проявляется, и отправлять в Microsoft, пусть что-то решают.


M>Кстати, а ты на других машинах пробовал? Как насчёт WinXP/2003 — везде проявляется? Service Pack влияет?


Спасибо огромное за помощь mihailik!
Оказывается дело вот в чем:
если на клиенте написать
ChannelServices.RegisterChannel(new IpcClientChannel(), false);

а на сервере
ChannelServices.RegisterChannel(new IpcServerChannel("SomeIpcServer"), true);

То мы получим "болт" при соединении, на который я нарвался
------------
Кстати у меня Win2003SP1.Ru
[Img Url="http://www.brainbench.com/transcript.jsp?pid=5754032"]http://www.brainbench.com/images/certlogo/color/mastercert/csharp2fundamentals.gif[/Img]
Re[7]: Немогу активировать объект
От: mihailik Украина  
Дата: 16.01.06 10:39
Оценка:
ZTZ>если на клиенте написать
ZTZ>
ZTZ>ChannelServices.RegisterChannel(new IpcClientChannel(), false);
ZTZ>

ZTZ>а на сервере
ZTZ>
ZTZ>ChannelServices.RegisterChannel(new IpcServerChannel("SomeIpcServer"), true);
ZTZ>

ZTZ>То мы получим "болт" при соединении, на который я нарвался

Отлично, будет на заметку
Re[7]: Немогу активировать объект
От: Jericho113 Украина  
Дата: 16.01.06 14:20
Оценка:
Здравствуйте, Zergling The Zerg, Вы писали:


ZTZ>Оказывается дело вот в чем:

ZTZ>если на клиенте написать
ZTZ>
ZTZ>ChannelServices.RegisterChannel(new IpcClientChannel(), false);
ZTZ>

ZTZ>а на сервере
ZTZ>
ZTZ>ChannelServices.RegisterChannel(new IpcServerChannel("SomeIpcServer"), true);
ZTZ>

ZTZ>То мы получим "болт" при соединении, на который я нарвался
ZTZ>------------
ZTZ>Кстати у меня Win2003SP1.Ru

А какой версии фреймворк вы используете?
Я посмотрел доку по 1.1. там функция RegisterChannel использует один аргумент типа IChannel.
NetDigitally yours ....
Re[8]: Немогу активировать объект
От: Mab Россия http://shade.msu.ru/~mab
Дата: 16.01.06 14:22
Оценка:
Здравствуйте, Jericho113, Вы писали:

J>Я посмотрел доку по 1.1. там функция RegisterChannel использует один аргумент типа IChannel.

В 2.0 эта перегрузка объявлена obsolete и добавлен второй аргумент.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.