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| putsm.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>