[Ironpython-users] .NET Remoting and Interface based objects

Dino Viehland dinov at microsoft.com
Wed Oct 12 00:19:47 CEST 2011


The C# wrapper could be as simple as:

public static class MyWrapper {
                public static void IServerInterfaceMethod(object o) {
                                ((IServerInterface)o).IServerInterfaceMethod();
                }
}

Used like:

MyWrapper.IServerInterfaceMethod(TransparentProxy)

If you just want to call all static methods, or you can make an instance wrapper:

public class MyWrapper {
                private readonly IServerInterface _wrapped;
                public MyWrapper(object wrapped) {
                                _wrapped = (IServerInterface)wrapped;
                }
                public void IServerInterfaceMethod(object o) {
_wrapped.IServerInterfaceMethod();
                }
}

Used like:
MyWrapper(TransparentProxy).IServerInterfaceMethod()

Then you can pass around the wrapper object and just use it like a normal object.  If you need to get back to the transparent proxy for some reason you could add a property which returns it.


From: Muyal,Tsahi [mailto:Tsahi.Muyal at kla-tencor.com]
Sent: Tuesday, October 11, 2011 3:01 PM
To: Dino Viehland
Cc: ironpython-users at python.org
Subject: RE: .NET Remoting and Interface based objects

The clr.Convert(TransparentProxy, IServerInterface) is failing with same exception

I will code a C# wrapper but what does it mean? A client side assembly that will get the transparent proxy and convert it to the Interface type I need?

Tsahi Muyal
Corporate Platform Group(CPG)
KLA-Tencor Israel

From: Dino Viehland [mailto:dinov at microsoft.com]
Sent: Tuesday, October 11, 2011 11:46 PM
To: Muyal,Tsahi
Cc: ironpython-users at python.org
Subject: RE: .NET Remoting and Interface based objects

Hurm, maybe this is a different problem then...  Does:

import clr
clr.Convert(TransparentProxy, IServerInterface).IServerInterfaceMethod()

work?

If not then my guess is you might need a C# wrapper :(

From: Muyal,Tsahi [mailto:Tsahi.Muyal at kla-tencor.com]
Sent: Tuesday, October 11, 2011 2:39 PM
To: Dino Viehland
Cc: ironpython-users at python.org
Subject: RE: .NET Remoting and Interface based objects

I tried using typedproxy class
Not sure I am using it the right way

This is what I did

test = typedproxy(TransparentProxy, IServerInterface)

test.IServerInterfaceMethod()

This call is failing with "Expected IServerInterface, got MarshalByRefObject"

I debugged the code to find out where it is failing, it is in typedproxy (I marked the line)

class typedproxy(object):
    __slots__ = ['obj', 'proxyType']
    def __init__(self, obj, proxyType):
        self.proxyType = proxyType
        self.obj = obj
    def __getattribute__(self, attr):
        proxyType = object.__getattribute__(self, 'proxyType')
        obj = object.__getattribute__(self, 'obj')
        att = getattr(proxyType, attr)
        att2 = att.__get__(obj, proxyType) #This line is throwing the exception
        return att2

Any idea?

Thank you very much;
Tsahi Muyal

From: Dino Viehland [mailto:dinov at microsoft.com]
Sent: Tuesday, October 11, 2011 10:58 PM
To: Muyal,Tsahi; ironpython-users at python.org
Subject: RE: .NET Remoting and Interface based objects

I'm not quite certain this is the same issue but you should try using the wrapper from this thread:

http://lists.ironpython.com/pipermail/users-ironpython.com/2006-September/003549.html

The transparent proxies always succeed when casting them to an interface type so it's hard for us to work w/ the objects when we need to check for certain interfaces ourselves.

From: ironpython-users-bounces+dinov=microsoft.com at python.org [mailto:ironpython-users-bounces+dinov=microsoft.com at python.org] On Behalf Of Muyal,Tsahi
Sent: Tuesday, October 11, 2011 9:13 AM
To: ironpython-users at python.org
Subject: [Ironpython-users] .NET Remoting and Interface based objects

Hi,
I am trying to call our .NET service via remoting using IronPython
I have the transparent proxy object but I don't know how to cast it to the interfaces (that are implemented by the server side object)

I tried IServerInterface.SomeMethod(transparent-proxy-object) but it is failing with "expected IServerInterface, got MarshalByRefObject"

How can I cast it to an interface?

I am using 2.7

Thanks in advance,
Tsahi Muyal

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20111011/d2fd8c0a/attachment.html>


More information about the Ironpython-users mailing list