通过Web Service混合.NET和Java技术往往很容易,但Web Service并

非是.NET和Java互操作的万灵丹。Web

Service在集成独立的跨网络通信的组件时非常有用,在简单的调用/返回情景中,涉及的数据类型数量非常有限,且Web

Service是基于标准的,混合.NET和Java技术通常显得很简单,因此有人认为Web

Service是实现.NET和Java互操作的万能答案,但事实却并非如此。

在搜索引擎中搜索一下“Java .NET互操作”将会返回很多搜索结果,但听过今年6月JavaOne会议上微软主题演讲的人应该还有印象(51CTO编者注:互操作性在近年来成为了微软的关注重点之一,不仅仅是Java,还有PHP互操作性等

等),微软说放弃Web Service可能是最好的办法。这是很不幸的消息,因为对于很多任务,Web

Service并不是Java和.NET互操作的理想解决方案,而且对于部分任务,根本不可能使用Web

Service。在这篇文章中,我会列举三个Java和.NET互操作情景,如果使用Web Service实现会被认为是愚蠢的行为。

首先,我先说一下我认为的Java和.NET互操作的含义,真正的Java和.NET互操作机制应允许你在任何地方使用.NET语言编写的代码代替

用Java语言编写的代码,换句话说,它应该允许你从.NET代码中访问任何基于Java的实体(如对象,类或方法),反之亦如此。

情景1 在Java应用程序中嵌入.NET UI控件

假设你要在基于AWT的Java应用程序中使用一个Windows窗体控件,标准的做法是获得与AWT容器对等的句柄,然后使用该句柄设置Windows窗体控件的父对象为AWT容器,你可以使用一个Web Service实现这类互操作。

Web

Service是松散耦合的,服务和客户端运行在独立的进程中,因为是独立的进程,你就不能交换窗口句柄,句柄只在同一个进程中才有效,有意义,换句话

说,这是一个必须紧密结合才能互通的情况,这种情况Web

Service不能适应,想在基于Java的GUI应用程序中嵌入基于.NET的控件,开发人员必须想另外的办法,反之亦如此。

情景2 从Java应用程序中调用.NET程序库

如果你想在Java程序中调用.NET程序库,那你可能正处于以下环境:

1)已经在.NET开发中使用过这个库,你想在Java环境中继续使用;

2)已经花钱购买过.NET程序库,不想再花钱购买Java程序库;

3)不考虑平台差异的话,这个程序库可能是最好使用的了。

在这种情况下,你可以使用Web Service从Java访问.NET代码,但这种用法似乎有点小题大做,Web

Service更适合两个更大的独立组件之间的通信,而不是将一个库集成到一个更大的系统中去。如果程序库就在同一台机器上,非要创建一个Web

Service来访问这个库显得有点过分,在这种情况下,在Java程序进程内运行基于.NET的程序库意义更大,但采用Web

Service是做不到的。

情景3 使用Java API注册.NET监听器

假设你使用了JMS(Java消息服务),想创建一个.NET组件来向它发送消息,以及从它那里接收消息。向JMS发送消息一般使用JMS API中的各种发送函数,通过在JMS基础架构上注册监听器来接收消息。

你也可以使用Web Service来实现,但它并不擅长处理异步通信,如果你真要使用Web Service实现异步通信,你有两个选择:

1)实现一个轮询机制,客户端反复轮询服务获得结果,当得到结果后,服务将其放在一个预定的地方,轮询操作就会发现它。

2)实现一个回调机制,客户端留下回复地址,当获得结果后,服务将结果发往该地址。

不幸的是,这两个机制都需要实现重大的基础架构,使用轮询机制时,需要实现轮询机制,还需要为服务提供一个机制放置结果,以便轮询机制可以找到它,使用回调时,必须在客户端嵌入一个全新的“反向”Web Service,以便原始服务可以联系到它,并返回异步结果。

这两个方法都不完美,如果你想一个应用程序简单地调用一个程序库,Web Service需要实现超乎任务需要的机制,必须要有更好的方式来做到这一点。

Java和.NET互操作需要的附件工具

对于复杂的Java和.NET互操作需求(如在Java程序中调用.NET库,或使用Java API注册一个.NET监听器),Web

Service强迫你另起炉灶,你必须建立复杂的基础架构——通过套接字交换XML——完成本应该很简单的任务,可以说这么做显得很愚蠢,对于其它任务,

如在Java程序中嵌入.NET UI控件,使用Web Service根本是不可能的。

开发人员和架构师工具箱应该拥有很多Java和.NET互操作解决方案,对有些情况可能有用,但对于许多互操作任务,你需要不同的工具,当Web

Service满足不了要求时,Java和.NET桥接器可能会有用,甚至在那些可以使用Web

Service的情景中,使用Java和.NET桥接器可能效率更好,并且更易于使用。

如果你理解了Web Service在互操作性方面的限制,并熟悉其它解决方案,你就可以在你的应用程序中同时充分利用Java和.NET技术。

java服务和net服务_艾伟_转载:Java和.NET互操作:我们应该放弃Web Service吗?相关推荐

  1. Java和.NET互操作:应该放弃Web Service吗

    通过Web Service混合.NET和Java技术往往很容易,但Web Service并非是.NET和Java互操作的万灵丹.Web Service在集成独立的跨网络通信的组件时非常有用,在简单的调 ...

  2. Java开发Web Service的几种解决方案

    转自:http://blog.csdn.net/zolalad/article/details/25158995 Java开发中经常使用到的几种WebService技术实现方案 随着异构系统互联需求的 ...

  3. hashmap应用场景_京东4面(Java研发):事务隔离+乐观锁+HashMap+秒杀设计+微服务

    一面(基础面:约1小时) 自我介绍,主要讲讲做了什么和擅长什么 springmvc和spring-boot区别 @Autowired的实现原理 Bean的默认作用范围是什么?其他的作用范围? 索引是什 ...

  4. 树莓派Java程序运行_树莓派上Java程序作为linux服务并开机自动启动

    http://www.iigrowing.cn/shu_mei_pai_shang_java_cheng_xu_zuo_wei_linux_fu_wu_bing_kai_ji_zi_dong_qi_d ...

  5. java linux 管理系统_用Java开发一个本地服务管理软件

    使用Java开发一个本机服务管理程序,能够控制本机Tomcat.Apache服务的开启和关闭,图形界面控制.用户可以自己扩展其他服务,用来学习图形界面编程.多线程.事件响应等都不错. 一.最终界面 先 ...

  6. java实现的微服务架构_详解Java 微服务架构

    一.传统的整体式架构 传统的整体式架构都是模块化的设计逻辑,如展示(Views).应用程序逻辑(Controller).业务逻辑(Service)和数据访问对象(Dao),程序在编写完成后被打包部署为 ...

  7. java服务降级与服务熔断区别_【原创】谈谈服务雪崩、降级与熔断

    引言 首先,之所以谈这个话题呢,是发现现在很多人对微服务的设计缺乏认识,所以写一篇扫盲文.当然,考虑到目前大多微服务的文章都是口水文,烟哥争取将实现方式讲透,点清楚,让大家有所收获! OK,我要先说明 ...

  8. java服务降级与服务熔断区别_服务降级和服务熔断

    服务熔断 在微服务架构中,微服务之间的数据交互通过远程调用完成,微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,此时如果链路上某个微服务的调用响应时间过长或者不可用,那么对微服务 ...

  9. java http服务端例子_简单的用 Java Socket 编写的 HTTP 服务器应用

    /*** SimpleHttpServer.java*/importjava.io.*;importjava.net.*;importjava.util.StringTokenizer;/*** 一个 ...

最新文章

  1. jquery腾讯微博
  2. 电脑图标有阴影如何去除
  3. C++ 编译器多态与运行时多态
  4. 体感Kinect手势识别开发基本原理
  5. 白话Elasticsearch47-深入聚合数据分析之Cardinality Aggs-cardinality算法之优化内存开销以及HLL算法
  6. 2021春季每日一题【week8 未完结】
  7. python源码精要(6)-CPython编译标志
  8. 技巧:教你一招优化 Go GC
  9. go protobuf tcp 粘包处理 demo
  10. 将本地代码备份到Github public repository
  11. 【ElasticSearch 】ElasticSearch监控工具 cerebro
  12. 混淆Android JAR包的方法
  13. 十七、Oracle学习笔记:视图操作和表复制
  14. php数据库太小要怎么改,PHP入坑之 MySqli对数据库增删改查
  15. html语言中下拉表单,html实现下拉菜单
  16. 舍得酒业前三季营收净利双增背后 低档酒提速拖累Q3毛利率
  17. C语言8.14文曲星上的猜数游戏
  18. 计算机二级MS office高级应用考试笔记攻略(完整-知识点)
  19. websocket 服务器外网访问
  20. Python-Flask开发微电影网站(八)

热门文章

  1. 英语题目作业(12)
  2. win10的c语言程序闪退,win10 1909系统出现应用闪退如何解决
  3. 魔法师鬼剑士地下城java_DNF新职业加入鬼剑士全家桶 魔法师又多一个萌宝
  4. 「完结撒花」使用intel realsense D435i深度相机获取信息,DOBOT MG400机械手实现动态实时抓取,并做了个GUI界面(python实现)
  5. 若要运行应用程序,您必须首先安装 .NET Framework 4.0 解决办法
  6. Android11对比IOS14,iPhone11升级至iOS14,对比苹果iOS13,迎来3大新变化
  7. an integer is required (got type tuple) 报错解决
  8. 以下不属于C语言字符集的为,c语言第1章练习题答案
  9. 数组处理函数——compact
  10. AC自动机原理及代码实现