ruby savon与mono wcf通信

ruby savon与mono wcf通信,ruby,wcf,mono,savon,Ruby,Wcf,Mono,Savon,我是mono wcf的新手,在代码方面遇到了一些问题。 最近,我在mono上使用ruby savon从wcf主机获取数据 这是我的ruby代码: client = Savon::Client.new do wsdl.document="http://localhost:9000/MonoWcf/MonoSevice/wsdl" end puts client.wsdl.soap_actions response = client.request :get_data 这表明: ruby -

我是mono wcf的新手,在代码方面遇到了一些问题。 最近,我在mono上使用ruby savon从wcf主机获取数据

这是我的ruby代码:

client = Savon::Client.new do 
wsdl.document="http://localhost:9000/MonoWcf/MonoSevice/wsdl" 
end
puts client.wsdl.soap_actions
response = client.request  :get_data
这表明:

ruby -KU -- '/home/charlot/Documents/Aptana Studio 3 Workspace/rubyfun/soap/savon.rb'
W, [2012-12-21T02:45:41.845966 #10527]  WARN -- : HTTPI executes HTTP GET using the httpclient adapter
get_data
get_data_using_data_contract
D, [2012-12-21T02:45:41.856091 #10527] DEBUG -- : SOAP request: http://localhost:9000/MonoWcf/MonoSevice/soap
D, [2012-12-21T02:45:41.856294 #10527] DEBUG -- : SOAPAction: "http://localhost:9000/IMonoService/GetData", Content-Type: text/xml;charset=UTF-8, Content-Length: 293
D, [2012-12-21T02:45:41.856329 #10527] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
        <env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsdl="http://tempuri.org/"   xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body><GetData>
</GetData>
</env:Body>
</env:Envelope>
W, [2012-12-21T02:45:41.856403 #10527]  WARN -- : HTTPI executes HTTP POST using the httpclient adapter
D, [2012-12-21T02:45:41.873963 #10527] DEBUG -- : SOAP response (status 415):
D, [2012-12-21T02:45:41.874057 #10527] DEBUG -- : 
/usr/local/lib/ruby/gems/1.9.1/gems/savon-1.2.0/lib/savon/soap/response.rb:108:in `raise_errors': Savon::HTTP::Error
    from /usr/local/lib/ruby/gems/1.9.1/gems/savon-1.2.0/lib/savon/soap/response.rb:18:in `initialize'
    from /usr/local/lib/ruby/gems/1.9.1/gems/savon-1.2.0/lib/savon/soap/request.rb:35:in `new'
    from /usr/local/lib/ruby/gems/1.9.1/gems/savon-1.2.0/lib/savon/soap/request.rb:35:in `response'
    from /usr/local/lib/ruby/gems/1.9.1/gems/savon-1.2.0/lib/savon/client.rb:86:in `request'
    from /home/charlot/Documents/Aptana Studio 3 Workspace/rubyfun/soap/savon.rb:15:in `dosoap'
    from /home/charlot/Documents/Aptana Studio 3 Workspace/rubyfun/soap/savon.rb:23:in `<main>'

非常感谢你的帮助

这是我刚刚修复的Mono的WCF代码中的一个bug

Ruby savon发送
内容类型:text/xml;charset=UTF-8
,但服务器需要
内容类型:text/xml;字符集=utf-8
。这是不正确的,检查应该不区分大小写并且忽略空白

您需要从github编译最新的mono,或者,作为一个临时解决方案,以某种方式让ruby savon发送
内容类型:text/xml;字符集=utf-8

临时解决方案

编辑
lib/savon/request.rb
(它在我的Mac电脑上的
/Library/Ruby/Gems/1.8/Gems/savon-2.0.2
中),顶部有

CONTENT_TYPE = {
  1 => "text/xml;charset=%s",
  2 => "application/soap+xml;charset=%s"
}
换成

CONTENT_TYPE = {
  1 => "text/xml; charset=%s",
  2 => "application/soap+xml; charset=%s"
}
然后将编码设置为“utf-8”,例如:

require 'savon'

client = Savon.client(:wsdl => "http://localhost:9999/MyService?wsdl", :encoding => "utf-8")
puts client.operations
response = client.call(:hello)

在我的Mac电脑上用Ruby 1.8.7进行测试。

不是答案,但在这种情况下,使用Wireshark准确地了解网络上发生了什么通常是一个好的开始。@Troleskn谢谢,我将尝试你的想法:)我在tcpdump中看到的错误消息是“HTTP/1.1 415预期内容类型”text/xml;charset=utf-8'but get'text/xml;charset=UTF-8',所以这是Mono的WCF堆栈中的一个bug。应该很容易修复,我去看看。@MartinBaulig谢谢,你真的帮了我:)
CONTENT_TYPE = {
  1 => "text/xml; charset=%s",
  2 => "application/soap+xml; charset=%s"
}
require 'savon'

client = Savon.client(:wsdl => "http://localhost:9999/MyService?wsdl", :encoding => "utf-8")
puts client.operations
response = client.call(:hello)