hprose-csharp(C#)版说明文档

更新时间:2024-01-29 21:45:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

用户手册

1.3

(C#版)

目录

前言 ............................................................................................................................... 1\t\r ?本章提要 .......................................................................................................................................................... 1\t\r ?欢迎使用Hprose .............................................................................................................................................. 2\t\r ?体例 .................................................................................................................................................................. 3\t\r ?

菜单描述 ........................................................................................................................................................................ 3\t\r ?屏幕截图 ........................................................................................................................................................................ 3\t\r ?代码范例 ........................................................................................................................................................................ 3\t\r ?运行结果 ........................................................................................................................................................................ 3\t\r ?

获取帮助 .......................................................................................................................................................... 3\t\r ?

电子文档 ........................................................................................................................................................................ 3\t\r ?在线支持 ........................................................................................................................................................................ 3\t\r ?

联系我们 .......................................................................................................................................................... 3\t\r ?第一章 快速入门 .............................................................................................................. 5\t\r ?本章提要 .......................................................................................................................................................... 5\t\r ?安装Hprose for C# .......................................................................................................................................... 6\t\r ?

安装方法 ........................................................................................................................................................................ 6\t\r ?二进制方式 ................................................................................................................................................................. 6\t\r ?源码方式 .................................................................................................................................................................... 6\t\r ?

创建Hprose的Hello服务器 ............................................................................................................................ 7\t\r ?创建Hprose的Hello客户端 ............................................................................................................................ 9\t\r ?

通过Invoke方法动态调用 ............................................................................................................................................ 10\t\r ?通过接口方式调用 ........................................................................................................................................................ 11\t\r ?

第二章 类型映射 ............................................................................................................ 13\t\r ?本章提要 ........................................................................................................................................................ 13\t\r ?基本类型 ........................................................................................................................................................ 14\t\r ?

值类型 .......................................................................................................................................................................... 14\t\r ?引用类型 ...................................................................................................................................................................... 14\t\r ?基本类型的映射 ............................................................................................................................................................ 15\t\r ?序列化类型映射 ....................................................................................................................................................... 15\t\r ?反序列化默认类型映射 ............................................................................................................................................. 15\t\r ?反序列化有效类型映射 ............................................................................................................................................. 16\t\r ?

容器类型 ........................................................................................................................................................ 17\t\r ?

列表类型 ...................................................................................................................................................................... 17\t\r ?序列化类型映射 ....................................................................................................................................................... 17\t\r ?反序列化类型映射 .................................................................................................................................................... 17\t\r ?字典类型 ...................................................................................................................................................................... 18\t\r ?

序列化类型映射 ....................................................................................................................................................... 18\t\r ?反序列化类型映射 .................................................................................................................................................... 18\t\r ?

对象类型 ........................................................................................................................................................ 18\t\r ?

通过ClassManager来注册自定义类型 ........................................................................................................................ 19\t\r ?

第三章 服务器 ............................................................................................................... 20\t\r ?本章提要 ........................................................................................................................................................ 20\t\r ?通过独立服务器方式发布服务 ........................................................................................................................ 21\t\r ?

发布实例方法 ............................................................................................................................................................... 21\t\r ?Methods属性 ............................................................................................................................................................... 26\t\r ?AddMethod方法 ...................................................................................................................................................... 26\t\r ?AddMethods方法 .................................................................................................................................................... 26\t\r ?AddInstanceMethods方法 ....................................................................................................................................... 26\t\r ?AddStaticMethods方法 ........................................................................................................................................... 26\t\r ?AddMissingMethod方法 .......................................................................................................................................... 27\t\r ?隐藏发布列表 ............................................................................................................................................................... 27\t\r ?调试开关 ...................................................................................................................................................................... 27\t\r ?对象序列化模式 ............................................................................................................................................................ 28\t\r ?P3P开关 ...................................................................................................................................................................... 28\t\r ?跨域开关 ...................................................................................................................................................................... 28\t\r ?服务器事件 ................................................................................................................................................................... 29\t\r ?OnBeforeInvoke事件 .............................................................................................................................................. 29\t\r ?OnAfterInvoke事件 ................................................................................................................................................. 29\t\r ?OnSendHeader事件 ............................................................................................................................................... 30\t\r ?OnSendError事件 ................................................................................................................................................... 30\t\r ?存取环境上下文 ............................................................................................................................................................ 30\t\r ?

通过aspx方式发布服务 ................................................................................................................................. 30\t\r ?

按全局发布方法 ............................................................................................................................................................ 30\t\r ?按会话发布方法 ............................................................................................................................................................ 33\t\r ?按请求发布方法 ............................................................................................................................................................ 33\t\r ?存取环境上下文 ............................................................................................................................................................ 34\t\r ?

通过自定义HTTP处理程序来发布服务 ......................................................................................................... 35\t\r ?第四章 客户端 ............................................................................................................... 36\t\r ?本章提要 ........................................................................................................................................................ 36\t\r ?同步调用 ........................................................................................................................................................ 37\t\r ?

通过Invoke方法进行同步调用 .................................................................................................................................... 37\t\r ?带名称空间(别名前缀)方法 .................................................................................................................................. 37\t\r ?可变的参数和结果类型 ............................................................................................................................................. 37\t\r ?引用参数传递 ........................................................................................................................................................... 38\t\r ?

自定义类型的传输 .................................................................................................................................................... 39\t\r ?通过代理接口进行同步调用 .......................................................................................................................................... 40\t\r ?接口定义 .................................................................................................................................................................. 40\t\r ?带名称空间(别名前缀)方法 .................................................................................................................................. 41\t\r ?可变的参数和结果类型 ............................................................................................................................................. 41\t\r ?泛型参数和引用参数传递 ......................................................................................................................................... 42\t\r ?自定义类型 ............................................................................................................................................................... 42\t\r ?

异步调用 ........................................................................................................................................................ 43\t\r ?

通过Invoke方法进行异步调用 .................................................................................................................................... 43\t\r ?通过代理接口进行异步调用 .......................................................................................................................................... 45\t\r ?

异常处理 ........................................................................................................................................................ 46\t\r ?

同步调用异常处理 ........................................................................................................................................................ 46\t\r ?异步调用异常处理 ........................................................................................................................................................ 47\t\r ?

超时设置 ........................................................................................................................................................ 48\t\r ?HTTP参数设置 .............................................................................................................................................. 48\t\r ?

代理服务器 ................................................................................................................................................................... 48\t\r ?持久连接 ...................................................................................................................................................................... 48\t\r ?HTTP标头 ................................................................................................................................................................... 48\t\r ?

调用结果返回模式 .......................................................................................................................................... 49\t\r ?

Serialized模式 ............................................................................................................................................................. 49\t\r ?Raw模式 ..................................................................................................................................................................... 49\t\r ?RawWithEndTag模式 .................................................................................................................................................. 49\t\r ?

前言

在开始使用Hprose开发应用程序前,您需要先了解一些相关信息。本章将为您提供这些信息,并告诉您如何获取更多的帮助。

本章提要

l? 欢迎使用Hprose l? 体例 l? 获取帮助 l? 联系我们

前言

欢迎使用Hprose

您还在为Ajax跨域问题而头疼吗? 您还在为WebService的低效而苦恼吗? 您还在为选择C/S还是B/S而犹豫不决吗? 您还在为桌面应用向手机网络应用移植而忧虑吗? 您还在为如何进行多语言跨平台的系统集成而烦闷吗? 您还在为传统分布式系统开发的效率低下运行不稳而痛苦吗? 好了,现在您有了Hprose,上面的一切问题都不再是问题!

Hprose (High Performance Remote Object Service Engine) 是一个商业开源的新型轻量级跨语言跨平台的面向对象的高性能远程动态通讯中间件。它支持众多语言,例如.NET,Java,Delphi,Objective-C,ActionScript,JavaScript,ASP,PHP,Python,Ruby,C++,Perl等语言,通过Hprose可以在这些语言之间实现方便且高效的互通。

Hprose使您能高效便捷的创建出功能强大的跨语言,跨平台,分布式应用系统。如果您刚接触网络编程,您会发现用Hprose来实现分布式系统易学易用。如果您是一位有经验的程序员,您会发现它是一个功能强大的通讯协议和开发包。有了它,您在任何情况下,都能在更短的时间内完成更多的工作。

Hprose是PHPRPC的进化版本,它除了拥有PHPRPC的各种优点之外,它还具有更多特色功能。Hprose使用更好的方式来表示数据,在更加节省空间的同时,可以表示更多的数据类型,解析效率也更加高效。在数据传输上,Hprose以更直接的方式来传输数据,不再需要二次编码,可以直接进行流式读写,效率更高。在远程调用过程中,数据直接被还原为目标类型,不再需要类型转换,效率上再次得到提高。Hprose不仅具有在HTTP协议之上工作的版本,以后还会推出直接在TCP协议之上工作的版本。Hprose在易用性方面也有很大的进步,您几乎不需要花什么时间就能立刻掌握它。

Hprose与其它远程调用商业产品的区别很明显——Hprose是开源的,您可以在相应的授权下获得源代码,这样您就可以在遇到问题时更快的找到问题并修复它,或者在您无法直接修复的情况下,更准确的将错误描述给我们,由我们来帮您更快的解决它。您还可以将您所修改的更加完美的代码或者由您所增加的某个激动人心的功能反馈给我们,让我们能够更好的来一起完善它。正是因为有这种机制的存在,您在使用该产品时,实际上可能遇到的问题会更少,因为问题可能已经被他人修复了。

Hprose与其它远程调用开源产品的区别更加明显,Hprose不仅仅在开发运行效率,易用性,跨平台和跨语言的能力上较其它开源产品有着明显的不可取代的综合优势,Hprose还可以保证所有语言的实现具有一致性,而不会向其他开源产品那样即使是同一个通讯协议的不同实现都无法保证良好的互通。而且Hprose具有完善的商业支持,可以在任何时候为您提供所需的帮助。不会向其它没有商业支持的开源软件那样,当您遇到问题时只能通过阅读天书般的源代码的方式来解决。

Hprose支持许多种语言,包括您所常用的、不常用的甚至从来不用的语言。您不需要掌握Hprose支持的所有语言,您只需要掌握您所使用的语言就可以开始启程了。

本手册中有些内容可能在其它语言版本的手册中也会看到,我们之所以会在不同语言的手册中重复这些内容是因为我们希望您只需要一本手册就可以掌握Hprose在这种语言下的使用,而不需要同时翻阅几本书才能有一个全面的认识。

接下来我们就可以开始Hprose之旅啦,不过在正式开始之前,先让我们对本文档的编排方式以及如何获得更多帮助作一下说明。当然,如果您对下列内容不感兴趣的话,可以直接跳过下面的部分。

2 Hprose用户手册(C#版)

前言

体例

菜单描述

当让您选取菜单项时,菜单的名称将显示在最前面,接着是一个箭头,然后是菜单项的名称和快捷键。例如“文件→退出”意思是“选择文件菜单的退出命令”。

屏幕截图

Hprose是跨平台的,支持多个操作系统下的多个开发环境,因此文档中可能混合有多个系统上的截图。

代码范例

代码范例将被放在细边框的方框中:

public class Hello {

public static void main(String[] args) { System.out.println(\ } }

运行结果

运行结果将被放在粗边框的方框中:

Hello Hprose!

获取帮助

电子文档

您可以从我们的网站http://www.hprose.com/documents.php上下载所有的Hprose用户手册电子版,这些文档都是PDF格式的。

在线支持

我们的技术支持网页为http://www.hprose.com/support.php。您可以在该页面找到关于技术支持的相关信息。

联系我们

如果您需要直接跟我们取得联系,可以使用下列方法:

Hprose用户手册(C#版)

3

前言

公司名称 公司地址

北京蓝慕威科技有限公司

北京市海淀区马连洼东馨园2-2-101号 市场及大型项目合作: manager@hprfc.com

电子邮件 产品购买及项目定制: sales@hprfc.com

技术支持: support@hprfc.com

联系电话 +86-15010851086(周一至周五,北京时间早上9点到下午5点)

4 Hprose用户手册(C#版)

第一章 快速入门

使用Hprose制作一个简单的分布式应用程序只需要几分钟的时间,本章将用一个简单但完整的实例来带您快速浏览使用Hprose for C#进行分布式程序开发的全过程。

本章提要

l? 安装Hprose for C#

l? 创建Hprose的Hello服务器 l? 创建Hprose的Hello客户端

第一章 快速入门

安装Hprose for C#

Hprose for .NET全部代码使用C#编写,透过CLR无缝支持.NET其它语言,例如:Visual Basic.NET、Visual C++等。

所有 .NET Framework 版本 (1.0, 1.1, 2.0, 3.0, 3.5, 4.0, 4.5) 全部支持。 所有 .NET Compact Framework 版本 (1.0, 2.0, 3.5) 全部支持。 支持 SilverLight 2.0, 3.0, 4.0, 5.0所有版本。

支持微软最新的云计算平台 Windows Azure Platform。 支持 Windows Phone 所有版本。 支持 Mono。

安装方法

二进制方式

Hprose for C#提供了可以直接使用的二进制文件,针对不同版本的.NET都有相应的编译好的版本。 .NET Framework 1.0~3.5的二进制版本包含有System.Numerics.dll、Hprose.dll和Hprose.Client.dll这三个文件。而.NET Framework 4.0的二进制版本只包含Hprose.dll和Hprose.Client.dll这两个文件。 其中System.Numerics.dll与.NET Framework 4.0中内置的System.Numerics.dll基本上完全兼容,它是.NET Framework 4.0中该文件在其它版本中的移植。Hprose依赖于该文件,所以在使用Hprose时,该文件必须要被项目工程引用。

Hprose.dll是Hprose for C#的完整版本,Hprose.Client.dll是Hprose for C#的客户端版本。Hprose.dll包含了Hprose.Client.dll中的所有内容,另外还包含了服务器端的组件。在您使用过程中,您不应该在同一个项目工程中同时引用这两个dll。通常在只使用客户端功能时,选择Hprose.Client.dll。需要服务器功能时,才需要选择Hprose.dll。只有Hprose for C#企业版中才包含Hprose.dll。

.NET Compact Framework、Silverlight和Windows Phone版本中只包含有System.Numerics.dll和Hprose.Client.dll这两个文件,在使用时,这两个文件都需要被引入您的项目工程中。

源码方式

Hprose for C#不是使用Visual Studio开发的,它的所有.NET版本的源码只有一套,但是对不同的.NET版本进行了针对性的优化,根据不同的编译条件,生成不同的版本。源码目录下的make.bat是用来编译所有版本的批处理文件。它直接调用C#编译器来完成编译。所以,您即使仅仅安装了.NET Framework运行时,也可以通过该批处理程序完成相应版本的编译,因为C#编译器在.NET Framework运行时中已经包含,所以您无需安装.NET Framework SDK。但对于.NET Compact Framework,SilverLight、Windows Phone和Mono,您只有安装相应的SDK之后才能够编译。

如果您不希望使用dll,可以直接将源码添加到您的工程当中,在编译时,参考make.bat中的相关内容,在您的工程中设置好条件编译符号和编译选项即可。

Hprose for C#同样支持Mono,但因为Mono本身存在很多问题,并不稳定,所以在Mono中使用Hprose for C#可能会在某些特殊情况下遇到一些奇怪的问题。所以,我们不建议您使用Mono。但如果您一定要坚持使用Mono,并在使用过程中也确实遇到了问题,请将问题反馈给Mono开发团队,由他们负责帮您解决。我们对您在Mono下遇到的任何问题(除非该问题在.NET Framework下也同样存在),不提供技术支持。

6 Hprose用户手册(C#版)

第一章 快速入门

创建Hprose的Hello服务器

我们以Visual C# 2008 Express Edition作为开发环境为例,来介绍一下如何创建一个Hprose服务器,按照传统惯例,都是以Hello World为例来作为开始的,我们这里稍稍做一下改变,我们创建的服务器将发布一个sayHello方法,这样客户端就可以调用它来对任何事物说Hello啦。

首先启动Visual C# 2008 Express Edition开发环境,打开菜单的“文件→新建项目”,选择“控制台应用程序”,然后填写好名称之后,点击确定:

接下来,在“解决方案资源管理器”中,选择新建的项目,将其改名为HelloServer。

项目引用中,除了System以外,其它引用皆可删除。然后在它的引用上点击右键,选择添加引用:

在打开的“添加引用”对话框中,选择浏览,之后选择到Hprose对应版本的二进制文件所在的目录下,选择添加Hprose.dll和System.Numerics.dll:

Hprose用户手册(C#版) 7

第一章 快速入门

接下来,我们就可以编写代码了:

using System;

using Hprose.Server;

namespace HelloExam { class Hello {

public string sayHello(string name) { return \ } }

class Program {

static void Main(string[] args) {

HproseHttpListenerServer server = new HproseHttpListenerServer(\:2010/\

server.Methods.AddInstanceMethods(new Hello()); server.Start();

Console.WriteLine(\ Console.ReadLine();

Console.WriteLine(\ } } }

上面代码中,Hello类提供了我们要发布的方法sayHello。主程序前三行的作用分别是创建服务、发布服务、启动服务。后面的ReadLine的作用是保持程序不会立即退出,这样服务才能一直运行。程序运行后,一旦按下回车键,程序就会立即终止,服务也会停止。

8 Hprose用户手册(C#版)

第一章 快速入门

好了我们来看看效果吧,选择“调试→开始执行(不调试)”:

之后程序便会启动:

接着打开浏览器,在地址栏中输入:http://localhost:2010/,然后回车,如果看到如下页面就表示我们的服务发布成功啦。

接下来我们来看一下客户端如何创建吧。

创建Hprose的Hello客户端

客户端我们以C#控制台程序为例,开发环境仍然为Visual C# 2008 Express Edition。

客户端可以通过Invoke方法动态调用服务,也可以通过接口方式来调用,下面我们来分别介绍这两种方式。

Hprose用户手册(C#版) 9

第一章 快速入门

通过Invoke方法动态调用

首先我们先来看看如何使用Invoke方法动态调用服务。

与上面创建服务器控制台应用程序步骤相同,客户端我们也是创建一个控制台应用程序,之后为其添加Hprose.Client.dll和System.Numerics.dll这两个引用:

接下来开始编写HelloClient类的代码:

using System;

using Hprose.Client;

namespace HelloExam { class Program {

static void Main(string[] args) {

HproseHttpClient client = new HproseHttpClient(\ Console.WriteLine(client.Invoke(\ Console.WriteLine(client.Invoke(\ } } }

上面代码很简单,主程序第一句创建了Hprose客户端,并且指定了服务器地址,第二句通过范型方法进行调用,范型方法Invoke中所指定的类型为返回结果的类型。第三句是通过非泛型方法调用,结果并不会自动转为string,而是以object类型返回。但是因为Console.WriteLine支持object输出,所以这里我们不需要显式转型仍然可以正确输出。现在我们在确保服务器已经运行的情况下,启动该客户端程序,正常的话,您会看到如下结果:

如果您的服务器没有启动,您可能会看到如下的出错结果:

10 Hprose用户手册(C#版)

第一章 快速入门

通过Invoke方法调用服务器方法很灵活,Invoke方法具有多个重载,即使是对同一个服务器方法,您也可以通过指定不同的参数来获得不同类型的结果。后面我们会在详细介绍Hprose客户端时,再对Invoke方法作更详细的介绍。

但是您也会发现,通过Invoke调用不是那么的直观,参数需要自己写入数组,结果也需要自己转型,那么有没有方法可以向本地调用那样来进行远程调用呢?可以,那就是通过接口方式调用。

通过接口方式调用

我们来对上面的代码做一下小的改造,修改以后的代码如下:

using System;

using Hprose.Client;

namespace HelloExam {

public interface IHello {

string sayHello(string name); }

class Program {

static void Main(string[] args) {

HproseHttpClient client = new HproseHttpClient(\ IHello hello = client.UseService(); Console.WriteLine(hello.sayHello(\ Console.WriteLine(hello.sayHello(\ }

Hprose用户手册(C#版) 11

本文来源:https://www.bwwdw.com/article/yw4w.html

Top