首先写一个简单的webservice:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld(string name) {
return "Hello, " + name;
}
}
在RoR项目里,添加app/apis/test_api.rb:
class TestApi < ActionWebService::API::Base
api_method :HelloWorld, :expects => [{:name => :string}], :returns => [:string]
end
这是RoR里面通用的webservice元信息描述。
添加app/controllers/test_controller.rb:
class TestController < ApplicationController
web_client_api :test, :soap, "http://localhost/test/Service.asmx",
:namespace => "http://tempuri.org/",
:soap_action_base => "http://tempuri.org",
:driver_options=>{:default_encodingstyle => SOAP::EncodingStyle::ASPDotNetHandler::Namespace }
def hello
render_text test.HelloWorld("Li Jie")
end
end
:soap_action_base选项是一个修补,不加这个选项会产生SOAPAction头错误。
运行服务器,在浏览器中访问/test/hello,发现名字为空。经过长时间调试,发现.Net在解析SOAP消息体时,不能处理这种命名空间:
<n1:HelloWorld xmlns:n1="http://tempuri.org/"
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<name xsi:type="xsd:string">Li Jie</name>
</n1:HelloWorld>
把n1去掉就行了。不过这部分实现在rubylib/soap/rpc/proxy.rb里面,实在不方便修改。为了让这个测试通过,暂时做了点小修改:
def route(req_header, req_body, reqopt, resopt)
req_env = ::SOAP::SOAPEnvelope.new(req_header, req_body)
unless reqopt[:envelopenamespace].nil?
set_envelopenamespace(req_env, reqopt[:envelopenamespace])
end
reqopt[:external_content] = nil
conn_data = marshal(req_env, reqopt)
if ext = reqopt[:external_content]
mime = MIMEMessage.new
ext.each do |k, v|
mime.add_attachment(v.data)
end
mime.add_part(conn_data.send_string + "\r\n")
mime.close
conn_data.send_string = mime.content_str
conn_data.send_contenttype = mime.headers['content-type'].str
end
conn_data.send_string.gsub!(/:n1/, '')
conn_data.send_string.gsub!(/n1:/, '')
conn_data = @streamhandler.send(@endpoint_url, conn_data,
reqopt[:soapaction])
if conn_data.receive_string.empty?
return nil
end
unmarshal(conn_data, resopt)
end
加粗的2行是我添加的代码,勉强可以让它工作,不过显然不是正确的方法。
不知道是不是.Net库里面的BUG。
相关推荐
ASP.NET项目移植到Ruby on Rails (ROR)的实践中,DB转移是一个关键步骤。这个过程涉及到将现有的ASP.NET应用程序的数据模型、数据库结构以及业务逻辑迁移到ROR框架中。在这个过程中,我们需要理解两个不同框架之间的...
在这个选题方向中,我们主要探讨的是与RoR相关的源代码分析和学习。源代码是理解任何编程语言或框架工作原理的关键,对于RoR来说也不例外。 在深入源代码之前,我们需要了解RoR的一些核心概念。如ActiveRecord,它...
在本文中,我们将探讨一些RoR性能优化的关键方面,主要基于JavaEye网站在使用RoR过程中积累的实际经验。 首先,RoR性能优化涉及到多个层面,包括应用程序的部署、服务器配置以及代码优化。在部署方面,操作系统的...
总结来说,Java适合大型和复杂的系统,.Net在Web开发中有一定竞争力,但需解决部署和前端问题;PHP在中小型企业Web应用中占据主导,且随着框架的成熟,其在企业级市场也有所突破;Ruby/ROR作为创新的象征,影响力虽...
在提供的压缩包文件中,我们可以看到"Ruby语言中文教程",这暗示了资源可能包含了关于Ruby语言的基础知识和进阶内容,对于学习RoR至关重要。Ruby是RoR的基础,理解其语法和特性对于掌握RoR框架极其关键。 **Ruby...
RoR ActiveRecord style syntax Ambient transaction Dynamic object Partial update 1:1 1:Many Many:Many relations Auto create table Anti sql injection Multiple data source Object validation ...
在Ror块中,不仅有常规的残差学习,还有更高层次的残差学习,即残差学习的残差。这种多层次的结构使得网络能更细致地理解特征,并且有助于减少过拟合,提高模型的泛化能力。 **CIFAR-10和CIFAR-100数据集** CIFAR-...
在RoR中,插件是一种可以扩展和定制框架功能的方式,它们通常包含模型、控制器、视图、帮助器以及其他相关的文件。这个插件可能解决了RoR在处理中文数据时的编码问题,使得用户无需访问特定网站下载,直接在项目中...
"ror实例"可能指的是在学习或实践中,通过创建一个具体的Rails应用程序来理解和掌握RoR的工作原理和最佳实践。 在Ruby on Rails中,重要知识点包括: 1. **Gemfile与Gemfile.lock**:项目中的Gemfile用于指定项目...
在Ruby on Rails(ROR)开发环境中,安装和配置正确的依赖包是至关重要的。这个压缩包包含了一系列用于ROR框架的基础组件,但不包括Ruby本身。让我们深入了解一下这些包的作用和重要性。 首先,`actionpack`是Rails...
确保在安装过程中勾选添加Ruby到系统路径选项,以便于后续命令行调用。 接下来,安装Rails框架。打开终端或命令提示符,运行`gem install rails`命令,这会安装最新版本的Rails。如果遇到权限问题,可能需要加上`...
在.NET框架中,文件上传是Web应用程序中常见的功能,尤其是对于ASP.NET平台。"ASP.NET支持断点续传,大文件上传"这个标题揭示了两个关键知识点:断点续传和处理大文件上传。 首先,让我们来理解断点续传的概念。...
在 PL/SQL 中调用 ROR Web 服务通常涉及到以下几个步骤: 1. **了解 Web 服务接口**:首先,你需要熟悉 ROR 应用程序提供的 API 接口,包括它们的 URL、HTTP 方法(GET、POST、PUT、DELETE 等)、请求头和请求体。...
1. **文件上传**:`UploadController`中的`create`方法接收上传的文件,并调用`SaveFile`模型的`save`方法将文件数据存储到数据库中。`SaveFile`模型的`save`方法读取文件的二进制流,并将其连同文件名一起保存到...
**初探ROR** Ruby on Rails(简称ROR)是一个基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在促进开发过程的简洁性和效率。Ruby on Rails的核心理念是“Don't Repeat ...
基于RoR的博客系统,代码风格简单清晰,前后太完善,适合初学者。
这使得.NET开发者能够在自己熟悉的环境中快速上手RoR。 **知识点:** 1. **跨平台支持:** 介绍如何在不同的操作系统上安装和配置Ruby on Rails环境,包括Ruby版本管理工具如RVM或rbenv的使用。 2. **开发工具选择...