Проблемма с callback от COM+ компанента.

Sergei VP
Новичок
Posts: 44
Joined: 21 Mar 2003 12:44

Проблемма с callback от COM+ компанента.

Post by Sergei VP »

Есть компанент COM+, написанный на C# , который активируется как сервер (Activation type - server). У него есть метод, который вызывается клиетским приложением, в одном из параметров этого метода передаётся объект созданный клиентом, который должен принимать callback вызовы от сервера.
Тип этого callback объекта определён в assembly COM+ компанента и конечно же унаследован от MarshalByRefObject object.

Это объект принимающий callback-и:

...
public interface ICallback
{
void OnResponce(string sResponce);
}

public class SrvCallback : MarshalByRefObject
{
private ICallback iClbk = null;

public SrvCallback(ICallback iClbk)
{
this.iClbk = iClbk;
}

public void OnResponce(string sResponce)
{
if ( this.iClbk != null )
{
this.iClbk.OnResponce(sResponce);
}
}
...

Это - метод COM+ компанента:

public void Test(string sText, SrvCallback callback)
{
for ( int i = 1; i < 4; i++ )
{
string sRsp = sText + " - " + i.ToString();

callback.OnResponce(sRsp);
}
}

Когда клиент пытается вызвать этот метод генерируется исключение, что мол не может преобразовать MarshalByRefObject к SrvCallback.
Такая "схема" работает с .NET ремоутингом, но не работает с COM+ или если сделать нечто подобное через COM interop, определив обычный Callback COM интерфейс в COM+ компаненте и написать клиента на C++, то всё работает как по маслу. :pain1:

Никто не знает почему?

Буду признательным за помощь.

Return to “Вопросы и новости IT”