Forum: IronRuby IronRuby overloaded method selection?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Orion E. (Guest)
on 2009-02-19 03:32
(Received via mailing list)
I have the following C# code, which I'm trying to translate to IronRuby

var host = new ServiceHost(typeof(MyService ));
host.AddServiceEndpoint(typeof(IWcfContract), new WSHttpBinding(), new
Uri("..."));

This compiles fine.

My ruby translation looks like this:

host = ServiceHost.new( MyService ) # this line works fine
host.add_service_endpoint( IWcfContract, WSHttpBinding.new,
Uri.new("...") )

As far as I can tell, that's a direct translation and how it should
work,
but the second line always throws

wrong number or type of arguments for `add_service_endpoint'
(ArgumentError)

Is it something to do with the way IronRuby resolves overloads? that
method
has about 8 different overloads, but I've tried
passing in strings (and all the other overload combinations), and
nothing
helps.

Note which may be of use: The second parameter is typed to accept
System.ServiceModel.Channels.Binding, whereas the WSHttpBinding is about
3
or 4 steps down (up?) the inheritance tree from that. Could that be
confusing it?

Note 2: I'm running this particular IronRuby =>
http://nbs.blob.core.windows.net/dlr/DLR.10369.release.zip

At any rate:
1) How can I figure out which overload IronRuby is deciding to call?
2) How can I make it select the correct overload if it's not doing so?
Tomas M. (Guest)
on 2009-02-19 04:53
(Received via mailing list)
Could you try the latest build?
Also try:

host.method(:add_service_endpoint).clr_members.each { |m| puts
m.to_string }

What does it print?

Tomas

From: removed_email_address@domain.invalid
[mailto:removed_email_address@domain.invalid] On Behalf Of Orion E.
Sent: Wednesday, February 18, 2009 5:26 PM
To: removed_email_address@domain.invalid
Subject: [Ironruby-core] IronRuby overloaded method selection?

I have the following C# code, which I'm trying to translate to IronRuby

var host = new ServiceHost(typeof(MyService ));
host.AddServiceEndpoint(typeof(IWcfContract), new WSHttpBinding(), new
Uri("..."));

This compiles fine.

My ruby translation looks like this:

host = ServiceHost.new( MyService ) # this line works fine
host.add_service_endpoint( IWcfContract, WSHttpBinding.new,
Uri.new("...") )

As far as I can tell, that's a direct translation and how it should
work, but the second line always throws

wrong number or type of arguments for `add_service_endpoint'
(ArgumentError)

Is it something to do with the way IronRuby resolves overloads? that
method has about 8 different overloads, but I've tried
passing in strings (and all the other overload combinations), and
nothing helps.

Note which may be of use: The second parameter is typed to accept
System.ServiceModel.Channels.Binding, whereas the WSHttpBinding is about
3 or 4 steps down (up?) the inheritance tree from that. Could that be
confusing it?

Note 2: I'm running this particular IronRuby =>
http://nbs.blob.core.windows.net/dlr/DLR.10369.release.zip

At any rate:
1) How can I figure out which overload IronRuby is deciding to call?
2) How can I make it select the correct overload if it's not doing so?
Orion E. (Guest)
on 2009-02-22 22:16
(Received via mailing list)
I'm now running 10606 from the nightly builds, and it seems to be
somewhat
fixed, but still not functioning. The error message now reads:

host.add_service_endpoint( IWcfContract, WSHttpBinding.new,
Uri.new("...") )
=> :0: can't convert Module into ClrString (TypeError)

Running the code you suggested gives this:

>>> host.method(:add_service_endpoint).clr_members.each { |m| puts
m.to_string }
System.ServiceModel.Description.ServiceEndpoint
AddServiceEndpoint(System.String, System.ServiceModel.Channels.Binding,
System.String)
System.ServiceModel.Description.ServiceEndpoint
AddServiceEndpoint(System.String, System.ServiceModel.Channels.Binding,
System.String, System.Uri)
System.ServiceModel.Description.ServiceEndpoint
AddServiceEndpoint(System.String, System.ServiceModel.Channels.Binding,
System.Uri)
System.ServiceModel.Description.ServiceEndpoint
AddServiceEndpoint(System.String, System.ServiceModel.Channels.Binding,
System.Uri, System.Uri)
System.ServiceModel.Description.ServiceEndpoint
AddServiceEndpoint(System.Type, System.ServiceModel.Channels.Binding,
System.String)
System.ServiceModel.Description.ServiceEndpoint
AddServiceEndpoint(System.Type, System.ServiceModel.Channels.Binding,
System.String, System.Uri)
System.ServiceModel.Description.ServiceEndpoint
AddServiceEndpoint(System.Type, System.ServiceModel.Channels.Binding,
System.Uri)
System.ServiceModel.Description.ServiceEndpoint
AddServiceEndpoint(System.Type, System.ServiceModel.Channels.Binding,
System.Uri, System.Uri)

It looks like IronRuby is having to choose between (String, Binding,
Uri)
and (Type, Binding, Uri), and is selecting the former (when I want it to
select the latter).

I've tried doing this

host.add_service_endpoint( IWcfContract.to_clr_type, WSHttpBinding.new,
Uri.new("...") )

but the error message is still the same (can't convert module to
ClrString).

to_clr_type returns a System.RuntimeType - does this inherit from
System.Type or is it a different thing entirely? - my knowledge of the
CLR
in this area is somewhat weak :-(

Thanks a lot
This topic is locked and can not be replied to.