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

通过Web Service混合.NETJava技术往往很容易,但Web Service并非是.NET和Java互操作的万灵丹。Web Service在集成独立的跨网络通信的组件时非常有用,在简单的调用/返回情景中,涉及的数据类型数量非常有限,且Web Service是基于标准的,混合.NET和Java技术通常显得很简单,因此有人认为Web Service是实现.NET和Java互操作的万能答案,但事实却并非如此。(参考阅读:常用Web Service汇总)

  在搜索引擎中搜索一下“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技术。

转载于:https://www.cnblogs.com/zjoch/archive/2010/04/20/1716566.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

京东AI战略宏图展现 不枉挖来这么多AI大牛

来源:网易科技4月15日下午,京东人工智能创新峰会在北京举行。这次会议虽然规模不大,但是堪称重磅,一是在这次会议上京东AI带头人周伯文首次向外界展示京东在AI领域的战略布局与发展方向;二是AI领域重量级人物周志华等大…

Lambda 表达式详解~Streams API~Stream常见接口方法

你可能没意识到Java对函数式编程的重视程度,看看Java 8加入函数式编程扩充多少功能就清楚了。Java 8之所以费这么大功夫引入函数式编程,原因有二: 代码简洁函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环…

ajax脚本格式,jQuery ajax调用 - jim脚本响应是什么格式?

对不起,如果这已被回答,但我搜索网络和本网站,我找不到答案...jQuery ajax调用 - jim脚本响应是什么格式?我有一个JavaScript函数,调用jim脚本来执行各种SQLite数据库查询。这是js函数:insertRecord: funct…

Scrapy源码阅读分析_1_整体框架和流程介绍

From:https://blog.csdn.net/weixin_37947156/article/details/74435304 Scrapy github 下载地址:https://github.com/scrapy/scrapy 介绍 Scrapy是一个基于Python编写的一个开源爬虫框架,它可以帮你快速、简单的方式构建爬虫,并…

Waymo正式向真正“无人车”迈进,申请DMV远程监控许可证

作者 : DudeWaymo 又向前迈出一大步,真正迈向“无人车”,测试的自动驾驶车辆将不配备安全驾驶员。据报道:Waymo已经向加州车管局提出了申请,Waymo官方也证实了媒体报道,而DMV方面称,在申请提交后…

或者是修改服务器时间,修改云服务器时间设置

修改云服务器时间设置 内容精选换一换云服务器的系统盘在创建云服务器时自动创建并挂载,无需单独购买。数据盘可以在购买云服务器的时候一同购买,由系统自动挂载给云服务器。也可以在购买了云服务器之后,单独购买云硬盘并挂载给云服务器。本节…

Lambda 表达式详解~Streams API~规约操作

上一节介绍了部分Stream常见接口方法,理解起来并不困难,但Stream的用法不止于此,本节我们将仍然以Stream为例,介绍流的规约操作。 规约操作(reduction operation)又被称作折叠操作(fold&#x…

Scrapy源码阅读分析_2_启动流程

From:https://blog.csdn.net/weixin_37947156/article/details/74436333 使用 PyCharm 打开下载好的 Scrapy 源码(github:https://github.com/scrapy/scrapy) scrapy命令 当用 scrapy 写好一个爬虫后,使用 scrapy craw…

重磅!这可能是史上最全的AI产业链地图了

来源:智东西摘要:信通院最新发布全球人工智能产业地图,从底层技术到垂直应用,盘点人工智能发展态势。这年头,没挂上AI的名号,都不好意思说自己是旗舰机。德勤也预测到:2023年,人工智…

在godaddy的空间上发布使用MySql 和 Entity Framework做的网站时遇到的Security Exception...

前两天在godaddy上发布使用MySql和Entity Framework做的网站时,遇到了Security Exception,显示如下面的错误信息:SecurityException: Request for the permission of type System.Security.Permissions.SecurityPermission, mscorlib, Versio…

2018年医疗人工智能技术与应用白皮书

来源:互联网医疗健康产业联盟【导读】2017 年医疗人工智能发展迅速,产业格局风起云涌。人工智能在医疗领域中的应用已非常广泛,包括医学影像、临床决策支持、语音识别、药物挖掘、健康管理、病理学等众多领域。本白皮书梳理和研究国际、国内医…

Scrapy源码阅读分析_3_核心组件

From:https://blog.csdn.net/weixin_37947156/article/details/74481758 这篇这要是关于核心组件,讲解这些核心组件初始化都做了哪些工作。包括:引擎、下载器、调度器、爬虫类、输出处理器 等的初始化。每个核心组件下其实都包含一些小的组件…

微信服务器向公众号推送消息或事件后,微信服务器向公众号推送消息或事件后,得到的回应不合法?...

呼啦08-04加粗标红插入代码插入链接插入图片上传视频请 登录 后发表内容关闭新增或编辑超链接链接地址关闭插入视频视频链接Appid: wxd4170daab0213d6a昵称: 大都会官微UAT时间: 2021-08-04 11:03:44内容: 微信服务器向公众号推送消息或事件后,得到的回应不合法次数…

Lambda 表达式详解~Stream Pipelines

前面我们已经学会如何使用Stream API,用起来真的很爽,但简洁的方法下面似乎隐藏着无尽的秘密,如此强大的API是如何实现的呢?比如Pipeline是怎么执行的,每次方法调用都会导致一次迭代吗?自动并行又是怎么做到…

Ubuntu桌面培训(Ubuntu Desktop Course)中文译本发布

经过一段时间的努力,Ubuntu 桌面培训已经完成翻译,正式公布。 本课程为家庭用户和办公室用户提供 Ubuntu 操作系统的培训。目标对象不必预先了解 Ubuntu,但必须具备基本的计算机使用能力。要开始学习本课程,请先在您的计算机硬盘上…

报告:采用人工智能并不意味着成功

来源:199IT互联网数据中心毕马威发布了新报告“采用人工智能并不意味着成功”,分析了2018年的主要趋势。采用数字化劳动(Digital labor)、机器人流程自动化、人工智能、机器学习和其他创新技术解决方案是2018年和未来几年的流行趋…

Scrapy源码阅读分析_4_请求处理流程

From:https://blog.csdn.net/weixin_37947156/article/details/74533108 运行入口 还是回到最初的入口,在Scrapy源码分析(二)运行入口这篇文章中已经讲解到,在执行scrapy命令时,调用流程如下: …

普通电阻触摸屏多点触摸低成本解决方 转载

苹果公司iPhone的成功将多点触摸技术推到了一个前所未有的高度,经典的弹钢琴应用程序可以支持超过5点的同时触摸,虽然这一性能并不见得有太多的实用价值,但绝对带给了用户技术无限领先的震撼感。苹果公司的iPhone采用电容屏和他们的专利技术来…

30条架构原则

本文作者叫Srinath,是一位科学家,软件架构师,也是一名在分布式系统上工作的程序员。他是Apache Axis2项目的联合创始人,也是Apache Software基金会的成员。他是WSO2流处理器(wso2.com/analytics)的联席架构…

Gartner:2018年前沿技术预测

本文转载自科技中国,作者:孟海华(上海市科学学研究所),首发刊载于《科技中国》杂志2018年3月 第3期 预测。一、人工智能全球领先的信息技术研究与顾问公司Gartner认为,2018年将是人工智能大众化应用的开始,将影响到企业…