• <menuitem id="ysr28"><object id="ysr28"></object></menuitem>
    <div id="ysr28"></div><div id="ysr28"><s id="ysr28"></s></div>
    <dl id="ysr28"><menu id="ysr28"></menu></dl>
    <tbody id="ysr28"></tbody>
  • <sup id="ysr28"><menu id="ysr28"></menu></sup>
  • <dl id="ysr28"></dl>
    <dl id="ysr28"><menu id="ysr28"></menu></dl>
    首页 | 社区 | 博客 | 招聘 | 文章 | 新闻 | 下载 | 读书 | 代码
    亲,您未登录哦! 登录 | 注册

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

    打印文章

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

      在搜索引擎中搜索一下“Java .NET互操作”将会返回很多搜索结果,但听过今年6月JavaOne会议上微软主题演讲的人应该还有印象(51CTO编者注:互操作性在近年来成为?#23435;?#36719;的关注重点之一,不仅仅是Java,还有PHP互操作性等等),微软说放弃Web Service可能?#20146;?#22909;的办法。这是很不幸的消息,因为对于很多任务,Web Service并不是Java和.NET互操作的理想解决方案,而且对于部分任务,根本不可能使用Web Service。在这篇文章中,?#19968;?#21015;举三个Java和.NET互操作情景,如果使用Web Service实现会被认为是愚蠢的行为。

      首先,我?#20154;?#19968;下我认为的Java和.NET互操作的含义,真正的Java和.NET互操作机制应允许你在任何地方使用.NET语言编写的代码代替用Java语言编写的代码,换句话说,它应该允许你从.NET代码中访问任?#20301;?#20110;Java的实体(如对象,类或方法),反之亦如此。

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

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

      Web Service是松散耦合的,服务和客户端运行在独立的进程中,因为是独立的进程,你就不能?#25442;?#31383;口句柄,句柄只在同一个进程中才有效,有意义,换句话说,这是一个必须紧密结合才能互通的情况,这种情况Web Service不能适应,想在基于Java的GUI应用程序中嵌入基于.NET?#30446;?#20214;,开发人员必须想另外的办法,反之亦如此。

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

      如果你想在Java程序中调用.NET程序库,那你可能正处于以下环?#24120;?br>
      1)已经在.NET开发中使用过这个库,你想在Java环境中继续使用;

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

      3)不考虑平台差异的话,这个程序库可能?#20146;?#22909;使用的了。

      在这种情况下,你可以使用Web Service从Java访问.NET代码,但这种用法似乎有点小题大做,Web Service更适合两个更大的独立组件之间的通信,而不是将一个库集成到一个更大的系统中去。如果程序库就在同一台机器上,非要创建一个Web Service来访问这个库显得有点过分,在这种情况下,在Java程序进程内运行基于.NET的程序库意义更大,但采用Web Service?#20146;?#19981;到的。

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

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

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

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

      2)实现一个回调机制,客户端留下回复地址,?#34987;?#24471;结果后,服务将结果发往该地址。

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

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

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

      对于复杂的Java和.NET互操作需求(如在Java程序中调用.NET库,或使用Java API注册一个.NET监听器),Web Service强迫你另起炉灶,你必须建立复杂的基础架构——通过套接字?#25442;籜ML——完成本应该很简单的任务,可以说这么做显得很愚蠢,对于其它任务,如在Java程序中嵌入.NET UI控件,使用Web Service根本是不可能的。

      开发人员和架构师工具箱应该拥有很多Java和.NET互操作解决方案,对有些情况可能有用,但对于许多互操作任务,你需要不同的工具,当 Web Service满足不了要求时,Java和.NET桥接器可能会有用,甚至在那些可以使用Web Service的情景中,使用Java和.NET桥接器可能效率更好,并且更易于使用。

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

    本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

    编程爱好者论坛

    本栏最新文章

    双色球红球杀号方法
  • <menuitem id="ysr28"><object id="ysr28"></object></menuitem>
    <div id="ysr28"></div><div id="ysr28"><s id="ysr28"></s></div>
    <dl id="ysr28"><menu id="ysr28"></menu></dl>
    <tbody id="ysr28"></tbody>
  • <sup id="ysr28"><menu id="ysr28"></menu></sup>
  • <dl id="ysr28"></dl>
    <dl id="ysr28"><menu id="ysr28"></menu></dl>
  • <menuitem id="ysr28"><object id="ysr28"></object></menuitem>
    <div id="ysr28"></div><div id="ysr28"><s id="ysr28"></s></div>
    <dl id="ysr28"><menu id="ysr28"></menu></dl>
    <tbody id="ysr28"></tbody>
  • <sup id="ysr28"><menu id="ysr28"></menu></sup>
  • <dl id="ysr28"></dl>
    <dl id="ysr28"><menu id="ysr28"></menu></dl>