首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ruby-savon与mono-wcf通信

ruby-savon与mono-wcf通信
EN

Stack Overflow用户
提问于 2012-12-21 09:12:12
回答 1查看 840关注 0票数 2

我是第一次接触mono wcf,我遇到了一些关于我的代码的问题。最近,我使用ruby-savon从mono上的wcf主机获取数据。

这是我的ruby代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
client = Savon::Client.new do 
wsdl.document="http://localhost:9000/MonoWcf/MonoSevice/wsdl" 
end
puts client.wsdl.soap_actions
response = client.request  :get_data

这个是这样放的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 wsdl:

** `

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<import location="http://localhost:9000/MonoWcf/MonoSevice/wsdl?wsdl=wsdl0" namespace="http://localhost:9000"/>
<types/>
<binding name="BasicHttpBinding_IMonoService" type="i0:IMonoService">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="GetData">
        <soap:operation soapAction="http://localhost:9000/IMonoService/GetData" style="document"/>
        <input>
            <soap:body use="literal"/>
        </input>
        <output>
            <soap:body use="literal"/>
        </output>
    </operation>
    <operation name="GetDataUsingDataContract">
        <soap:operation soapAction="http://localhost:9000/IMonoService/GetDataUsingDataContract" style="document"/>
        <input>
            <soap:body use="literal"/>
        </input>
        <output>
            <soap:body use="literal"/>
        </output>
    </operation>
</binding>
<service name="service">
    <port name="BasicHttpBinding_IMonoService" binding="tns:BasicHttpBinding_IMonoService">
        <soap:address location="http://localhost:9000/MonoWcf/MonoSevice/soap"/>
    </port>
</service>

`**但是当我在windows(7)中托管wcf时,它真的得到了数据。

我的操作系统是: ubuntu 12单声道版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Mono JIT compiler version 2.10.8.1 (Debian 2.10.8.1-1ubuntu2.2)
Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com
TLS:           __thread
SIGSEGV:       altstack
Notifications: epoll
Architecture:  x86
Disabled:      none
Misc:          softdebug 
LLVM:          supported, not enabled.
GC:            Included Boehm (with typed GC and Parallel Mark)

真的很感谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-22 04:24:55

这是Mono的WCF代码中的一个bug,我刚刚在mono/master commit ea2f2cd中修复了它。

Ruby-savon发送Content-Type: text/xml;charset=UTF-8,但服务器需要Content-Type: text/xml; charset=utf-8。这是不正确的,检查应该是不区分大小写的并忽略空格。

您需要从github编译最新的单声道,或者作为临时变通方法,以某种方式让ruby-savon发送Content-Type: text/xml; charset=utf-8

临时解决方法

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CONTENT_TYPE = {
  1 => "text/xml;charset=%s",
  2 => "application/soap+xml;charset=%s"
}

将其更改为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CONTENT_TYPE = {
  1 => "text/xml; charset=%s",
  2 => "application/soap+xml; charset=%s"
}

然后将编码设置为"utf-8",例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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测试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13987201

复制
相关文章
编码通信与魔术初步(一)——通信浅谈
从今天开始,我将给大家介绍在数学魔术中非常值得浓墨重彩,大书特书一笔的一个系列——通信与编码。它是支撑21世纪信息世纪几乎最重要的数学基础理论,而且在魔术这个小领域里也有着十分重要的从理论到实践的应用。本系列是通信编码专题的第一个系列,前面会从通信和编码的纯理论部分开始讲起,然后以几个经典魔术来说明其中的奥妙。
magic2728
2023/01/30
3570
AngularJS 与 server 通信
详细过程请参考官网教程:https://angular.io/guide/quickstart
week
2018/08/24
6370
AngularJS 与 server 通信
Flutter与原生通信
这三种类型的Channel都是全双向通信,即A<=>B,flutter可以主动发送消息给Native端,并且Native接收到消息后可以做出回应,同样,Native端可以主动发送消息给flutter端,flutter端接收数据后给Native端。
愤怒的小鸟
2021/04/07
2.6K0
实时通信与socket
在很久之前浏览器要实现一个与服务端的实时双端通信(比如聊天系统)只能通过http轮询来做 当然,除此之外也有利用了flash实现一个socket来作为中转的方式。
epoos
2022/06/06
9500
FSMC与FPGA通信
STM32是ST(意法半导体)公司推出的基于ARM内核Cortex-M3的32位微控制器系列。Cortex-M3内核是为低功耗和价格敏感的应用而专门设计的,具有突出的能效比和处理速度。通过采用Thumb-2高密度指令集,Cortex-M3内核降低了系统存储要求,同时快速的中断处理能够满足控制领域的高实时性要求,使基于该内核设计的STM32系列微控制器能够以更优越的性价比,面向更广泛的应用领域。
瓜大三哥
2018/08/17
3.2K0
FSMC与FPGA通信
驱动通信:通过PIPE管道与内核层通信
在本人前一篇博文《驱动开发:通过ReadFile与内核层通信》详细介绍了如何使用应用层ReadFile系列函数实现内核通信,本篇将继续延申这个知识点,介绍利用PIPE命名管道实现应用层与内核层之间的多次通信方法。
微软技术分享
2023/10/11
2760
驱动通信:通过PIPE管道与内核层通信
WebSocket 通信过程与实现
WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输。但它跟 HTTP 没什么关系,它是基于 TCP 的一种独立实现。
wangxl
2018/07/27
8310
WebSocket 通信过程与实现
树莓派与arduino通信
一、安装树莓派及arduino开发环境 搭建树莓派串口通信开发环境 (1)安装Python: sudo apt-get update sudo apt-get install python (2)安装python的GPIO模块,用于控制LED、电机等: wget https://sourceforge.NET/projects/raspberry-gpio-python/files/RPi.GPIO-0.6.2.tar.gz    (下载GPIO库,因为更新,具体参考官网网址变动) ta
似水的流年
2018/01/18
1.5K0
树莓派与arduino通信
Django如何与ajax通信
注意:这里需要注意的是button的type不能写submit,因为写了submit就直接使用get请求/query/了,而没有执行ajax请求。
marsggbo
2020/06/12
1.7K0
树莓派与arduino通信
(2)安装python的GPIO模块,用于控制LED、电机等: wget https://sourceforge.NET/projects/raspberry-gpio-python/files/RPi.GPIO-0.6.2.tar.gz    (下载GPIO库,因为更新,具体参考官网网址变动)
似水的流年
2019/12/08
3.7K0
Vue 组件通信与路由
命名路由 绑定自定义的属性:to =" {name: '路由的名字'}” 路由的参数 path: ' /user/:id :to= "{name: 'user' , params:{id:1}}" path: ' /user' :to= " {name:'user' , query:{userId:1}}" 嵌套路由(应用子的路由是不同的页面结构) /home/music ===> /home/ movie 一个router-view中嵌套 另外一个route-view
默默的成长
2022/10/29
7130
网络编程与通信原理
不同设备之间通过网络进行数据传输,并且基于通用的网络协议作为多种设备的兼容标准,称为网络通信;
知了一笑
2023/02/13
4560
网络编程与通信原理
AS3与PHP通信
目前flash在各方个面的应用越来越广,而flash也不单只是注重自身绚丽的效果,也需要和外界程序交换数据,以实现更强大的功能,随着as3的到来,flash和外部交互的方式也越来越简便和合理化。今天就在这里谈谈as3和后台数据的交互(这里选择as3 php架构,其他配置同理)。
py3study
2020/01/09
9300
HTTP原理与通信流程
HTTP是不会对请求的双方进行身份验证的,服务器不会校验客户端的身份,谁都可以向服务器发送请求,任何人都的请求都会进行响应; 客户端也不会验证响应的数据是否是由自己请求的目标服务器所发出。
vimsudoers
2020/02/29
1K0
树莓派与arduino通信
(2)安装python的GPIO模块,用于控制LED、电机等: wget https://sourceforge.NET/projects/raspberry-gpio-python/files/RPi.GPIO-0.6.2.tar.gz    (下载GPIO库,因为更新,具体参考官网网址变动)
似水的流年
2018/01/14
1.7K0
如何与 Service Worker 通信
Service Worker 很棒。它们使 Web 开发人员可以实现以前原生应用专有的类似功能。这类功能是例如推送通知或后台同步的离线功能。
疯狂的技术宅
2020/04/09
1.4K0
WebSocket 通信过程与实现
WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输。但它跟 HTTP 没什么关系,它是基于 TCP 的一种独立实现。
用户9076598
2022/03/02
7650
面向消息的持久通信与面向流的通信
消息队列系统为持久异步通信提供多种支持,本质是提供消息的中介存储能力,这样就不需要消息发送方和接收方在消息传输过程中都保持激活状态。
用户3003813
2018/09/06
9250
面向消息的持久通信与面向流的通信
解密传统组件间通信与React组件间通信
在React中最小的逻辑单元是组件,组件之间如果有耦合关系就会进行通信,本文将会介绍React中的组件通信的不同方式
前端迷
2019/12/05
1.5K0
Linux用户空间与内核空间通信(Netlink通信机制)
Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式,一般不用Netlink。除非需要用到Netlink的广播特性时。
嵌入式Linux内核
2022/10/25
4.9K2
Linux用户空间与内核空间通信(Netlink通信机制)

相似问题

线程通信与进程通信

32

与stagewebview通信

10

EasyHook与通信

14

with与Azure通信

11

与WallpaperService通信

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文