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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://rubyforge.org/pipermail/ironruby-core/attachments/20090219/4bb5ed61/attachment.html>
Tomas Matousek
2009-Feb-19 02:41 UTC
[Ironruby-core] IronRuby overloaded method selection?
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: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at
rubyforge.org] On Behalf Of Orion Edwards
Sent: Wednesday, February 18, 2009 5:26 PM
To: ironruby-core at rubyforge.org
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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://rubyforge.org/pipermail/ironruby-core/attachments/20090218/bd2a53d1/attachment.html>
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://rubyforge.org/pipermail/ironruby-core/attachments/20090223/1470a464/attachment.html>