XML Web Services & 关键应用

今天和同事聊天得知,我以前设计的银行代理保险系统(俗称银保通)的方案基本上得以实施(我所在的部门只负责方案建议书设计,不负责实施),于是沾沾自喜了一下,因为这个项目有些特殊。

[背景] 什么是银行代理保险系统?

银行代理系统是指银行代理保险公司,销售其一些专门设计的、较为简单的保险产品。由于其险种设计简单方便、又很好地利用了银行的销售渠道,是一种金融业混业经营的很好的模式,所以近几年发展势头非常猛。

2001年全国银保业务保费收入只有50亿元,在寿险总收入中所占比重不到3.5%,2002年银行保险已夺取了总寿险收入17.1%的份额,银保收入388亿元,2003年我国银行代理保险业务实现保费收入约800亿元,占总寿险保费收入的25%以上,银保业务已成为仅次于个人营销业务的第二大寿险销售渠道。

从此可以看出,银保通系统的业务规模与重要性。

设计关键点

在设计此方案时,曾经有两种备选方案,其主要差别是前端界面、通讯协议与应用接口定义三个方式,分别有以下选择:

前端:

  • 利用现有的字符终端
  • 浏览器

通讯协议

  • 传统的 TCP Socket
  • XML Web Services(SOAP)

应用接口定义

  • 专用接口,根据每个保险公司的不同产品,定义不同的数据传输接口
  • Acord

注:Acord——用国际标准的保险行业应用协议,这是一个基于 XML 的开放式协议,在国外许多大的金融、保险服务集团中被广泛采用,此协议通用性强,便于扩充,所以基于此协议实现的系统更容易扩展、升级、集成与改造,Acord 主要定义了保险业务的数据模型和交易模型。

Acord 组织成立于 1970 年,是由保险公司、IT厂商、政府机构及保险业其它成员组成的非营利机构,宗旨在于开发、推广及维护保险业内信息交换标准,其背后有全世界超过 1000 家保险公司及一万五千家代理商提供支持,使得 Acord 的 XML 标准成为保险业网络服务的首要标准,并且成为和其它金融机构进行数据交换的必备标准,它包含保险行业的数据模型和基本交易,在此基础上,经过扩展,可以支持所有保险数据类型和交易类型,它的作用相当于银行清算中的 SWIFT 协议。

方案设计

其实很容易就能比较两种方案孰优孰劣,但对于很传统的银行业来说,采用浏览器/SOAP/Acord 这个方案是具有很大冒险性的,假如不能成功实施,则一定会打击方案设计人员和银行对于使用新技术的信心。

当时我也是捏了一把汗,通过对两种方案的优缺点的详细比较与分析,加上与相关人员的长时间沟通,终于在最后定下了这个方案。

insurance

然而项目在实施中,由于技术力量不足,Acord 在国内的资源也不充足,最后接口/数据格式仍然以自定义 Schema 为主,但毕竟在项目中使用了 Web? Services/SOAP/XML 等新兴技术,算是一种很好的尝试,而且也离 Acord 不远了。

这个项目即将开发完成,近期正在和国内的某著名保险公司联合测试接口,不久将在某分行投产,估计在国内大型金融企业,这也算是为数不多的在关键应用中使用 XML Web Serivces技术的一个案例了。

博客堂的资源利用问题

首先 BS 一下 CSDN,没有经过本人同意,就全盘转载我的 Longhorn 截图,还图片新闻呢  ,链接没有,出处搞错,这么大的网站,一点版权意识都没有。

近来觉得博客堂的气氛真的很好,大家都写了很多专注于技术的文章,受益匪浅,同时,也有不少新的技术高手加入,大大增加了这个群体的实力。

人多了,Post 也多了,很多很好的 Post 很快就沉了下去,而且很多好的 Comment 也不容易看到了。

为此建议:

1)加强版权保护意识与行动

2)有效地利用我们的资源,即然被别人利用,不如自己利用,可能的手段包括:

  • 有偿转载
  • 刊登在平面媒体定期
  • 整理优秀的 Post/Article ,形成周刊/月刊等

这样即能增加博客堂的影响力,也能增强我们的精品意识,激发大家创作的动力 …

 

这个“网银大盗”有点怪

虽然前一段在网上看到江民公司发现一个所谓的“网银大盗”病毒,可以获取用户在工商银行网上银行中的登录帐户名和密码云云,当时并没有深究,可近一个多月来却发现老有人在继续炒做这个病毒,Sina 上竟然还登了:分赃不均留下犯罪证据 “网银大盗”四作者被捕 这样一篇报道,我看了这个新闻后就觉得有问题(在 Sina 的评论被删掉了 悲伤的脸):

1、网上银行不可能直接提取现金的。

2、如果简单地使用用户名和密码就可以访问网上银行,那网银提供的功能一般都比较简单,例如只是帐户查询类的交易,至多可以做同客户的多帐户之间转帐,如果要实现向他人帐户转帐,则一般需要数字证书。

工商银行的网上银行的说明太乱,没看明白,但似乎和招行的差不多(提供了不需要证书的大众版和需要证书的专业版),所以作案者想简单地只利用帐户名和密码就实现转帐功能,也不太可能。况且转帐都是有交易记录的,那有那么容易随便就能从别人的帐户里往自己帐户里转帐呀?

3、工商银行网上银行的登录表单中的密码域使用的是 ActiveX ,想用程序 Hook IE 窗口,再存取 ActiveX 的属性,也不太容易吧? (这个不确定,但肯定比简单的 HTML Form 难),难道是使用键盘记录软件?

4、整个新闻就象讲一个没有逻辑的故事,情节本身就有很多漏洞,也不合常理

Google 了一下“网银大盗”,发现人家工行都没怎么在意,倒是江民公司感觉很着急的样子,称病毒描上银行数千亿资金、高危害病毒、正在挑战中国网上银行安全体系 … ,这情节让我想起了当年 CIH 病毒泛滥时病毒厂商的欢天喜地(当然还有那个硬盘逻辑锁 吐舌笑脸),江民公司的“安全专家”甚至给用户的建议是每次登录网上银行后,都要改一下密码,我晕呀 …

我服了 … ,我记得 CISSP 里专门有一 Chapter 是来讲职业道德的,太有必要了。

前两天参加“创建中国信息安全保障体系”暨中国第四届信息安全年会,很多做专业安全产品的公司没有来,反倒清一色的反病毒厂商当赞助,难道反病毒等于信息安全吗?唉

Aero , I got it !

longhorn自从 WinHEC 2004 上有了新的 Longhorn Build 后,这么多天一直期望能亲自感受一把 Longhorn 传说中的多层式用户界面(Tiered User Experience) — Aero 。

在单位的机器上(DirectX 8 显卡),装完 Longhorn 只要一启动 Windows Desktop Manager ,机器的硬盘就再也不停了,折腾了好长时间,也没搞定。

几经努力,终于在 HomePC 上搞到一块支持 DirectX 9.0 的显卡,在这台配置较高的机器上,终于如愿以偿 吐舌笑脸


更多 Aero 截图,请看这里 (有详细说明)

HomePC 的配置:

  • CPU:      P4 2.6G HT
  • RAM:     1 G DDR
  • HardDisk:120G
  • Display Adapter:nVIDIA FX5200
  • Monitor:MGA 770

BTW:装完 Longhorn 仅玩了半个小时,估计还有更多 Features 等待发现。

注:图片版权所有,如需转载,请与本人联系

Tidbits

1。WSE 2.0 可以在The Web Services Developer Center下载了

2。ASP.NET Page Framework负责人Nikhil Kothari又开始blog了,新的一篇列出了Web Forms control framework的新功能

3。对ASP.NET感兴趣的网友可以去读读下列ASP.NET 产品组成员的blog

Scott Guthrie
Rob Howard, ASP.NET Program Manager
Shanku Niyogi, ASP.NET Group Program Manager
Nikhil Kothari
ClayCo

4。微软的新一代编码控制系统(Codename “Hatteras“)

Source Code Control Services for Microsoft Visual Studio 2005 Team System

“Hatteras is a spicy new SQL Server-based, fully transactional, client-server source control system“

5。新宣布的Visual Studio 2005 Team System (Codename “Burton”)

…Team System is “an extensible life-cycle tools platform that helps software teams collaborate to reduce the complexity of delivering modern service-oriented solutions.”

包括下列 (depending on edition):

  • PreFast and FxCop help developers detect coding and security related issues earlier in the development cycle thereby reducing the overall cost of fixing code defects.
  • unit tests
  • Performance analysis tools
  • Distributed System Designers that help reduce the complexity of developing and deploying service-oriented applications
  • integrated source control, work item tracking, reporting, and custom policies that enable your team to efficiently manage change in your software development projects

下一代Windows用户界面开发在线讲座

代码名称为“Longhorn”的微软下一代操作系统,将带来PC技术的另一场飞跃,这次创新将不亚于“Windows95在当年所产生的影响。“Avalon”是“Longhorn”系统图形模块的开发阶段名称。本次在线网络讲座,可以让您对技术发展的前景先睹为快。我们将为您介绍“Avalon”的概念,优势,以及如何用XAML语言来设计“Longhorn”的用户界面。

本次在线讲座,我们采用的是美国微软的网络培训服务系统,您需要注册才能参加,请您提供真实注册信息。注册的界面为英文的,但是大家可以输入中文的注册信息,而且网络讲座的语言和文档都是中文的。我们是通过电子邮件发出会议通知、参加会议的地址链接,为了保证您能成功参加会议,注册时,请一定输入正确的Email地址。您提交注册信息后,会收到注册确认邮件,会议开始前,您还会受到我们的提醒邮件。

请点击

会议时间:200468日(星期二) 15:00-16:00

要参加在线讲座,请您按照注册提示的信息,完成注册,并下载安装一个客户端软件。请于讲座开始前10-15分钟提前进入会议的站点(注册后,会议的网址会发到您的邮箱)。如果您参加会议的过程有任何问题,请联系电子邮件:[email protected]获取技术支持。

微软(中国)有限公司 敬邀

  20045

做别人的生意前,先做好自己的生意

大名鼎鼎的 CISCO 这下也丢人了,思科公司证实部分源代码被盗 称正着手调查。CISCO 不是经常给自己的安全产品做广告吗? 而且还有大家趋之若鹜的CCSP(网络安全认证专家)吗?自己的安全都保证不了,怎么能保证别人的安全?

Windows 的源代码是通过 Mainsoft 泄露出去的,为 Microsoft 挽回了颜面,就看 CISCO 这个事件的调查结果了。

无独有偶,IBM 中国的网站前一段时间也出了一件丢人的事,在促销 DVD+CDRW 的 Combo 时,把价格错误地标成 1 元钱,结果好多哥们上去一订就是 100 台,最后 IBM 没办法,协商后做出了妥协:每人限购 5 台,把这事给了了。照我说,应该让他全部按照订单全部兑现,这么大的国际化的,以管理制度知名公司,竞然工作中能有如此低级失误,应该得到教训。而且这种事也不是第一次了,前几年 IBM 韩国的网站就曾出现过标错价(很低)卖 ThinkPad 的事。

另外,IBM 天天在吹嘘 WebSphere 多好多好,可就是它自己的网站上经常出现 500 错误,而且我还怀疑他们到底是不是用 WebSphere 来做应用服务器,反正前几年 Search 的时候经常出现 Notes 数据库的东西。

IBM 的咨询专家们、Sales 们、工程师们张口闭口就是电子商务、系统/流程整合、可靠性、行业经验、高性能等,拜托了各位,能不能用你们自己吹嘘的技术和产品把你们自己的网站/电子商务站点做好,给别人个榜样?!

总结两个观点:

1、在互联网高度发达的时代,源代码安全已经成了软件开发过程的安全管理的一个重要方面,我们这儿就曾经发生过有人删除 SouceSafe 源代码库的事情,在 微软 MVP 校园技术日-北京 我也重点提及这个问题。源代码泄露对一个小公司带来的伤害可能是致命的(如 Valve 公司的 Hafe-Life2 源代码被盗),对于大公司来说,名誉与形象的损失甚至比知识产权的损失要大好多。

2、做别人的生意前,先做好自己的生意。

Big Picture in MSN Messenger

今天从别人那儿学到个新鲜玩意儿,大大增加了 MSN Messenger 趣味性,看来 MSN Messenger 还有很多可以 Hack 的地方呀 笑脸

这就是用 MSN Shell 来实现的,有机会赶紧试一下吧。

BTW:为了显而易见地说明效果,抱歉直接在 Post 中用原始图片了。

查看:MSN Shell 站点 
下载:MSN Shell 3.1

在.NET里用XSLT时怎么使用msxsl:script

今天在CSDN论坛上看到一个网友在请教关于msxsl:script的用法。感觉这问题也许有点意思,所以在下面简述一下。

在MSXML里,你在msxsl:script里可以使用Javascript和VBScript,参考

<msxsl:script> Element

但在.NET里,你只能使用那些.NET支持的语言,包括C#,VB.NET,JScript等。

譬如,我们想在XSLT里计算下面这个XML里people的和,

<root>
  <people>1</people>
  <people>2</people>
  <people>3</people>
  <people>4</people>
</root>

我们可以使用象这样的XSLT

<xsl:stylesheet version=”1.0″ xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”>
<xsl:output method=”text” />

<xsl:template match=”/”>
   sum:<xsl:value-of select=”sum(root/people)”/>
</xsl:template>

</xsl:stylesheet>

在MSXML和浏览器里,我们也可以这么做,

<xsl:stylesheet version=”1.0″
      xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”
      xmlns:msxsl=”urn:schemas-microsoft-com:xslt”
      xmlns:user=”anything here”>

<xsl:output method=”text” />

<msxsl:script language=”JavaScript” implements-prefix=”user”>
<![CDATA[
   function sum(nodelist)
   {
      var d = 0;
      var node = nodelist.nextNode();
      while (node != null)
      {
  d += parseInt(node.text);
  node = nodelist.nextNode();
      }

      return d;
   }
]]>
</msxsl:script>

<xsl:template match=”/”>
  sum:<xsl:value-of select=”user:sum(root/people)”/>
</xsl:template>

</xsl:stylesheet>

但如果你在.NET下使用上述XSLT的话,你就会得到下列错误:

Unhandled Exception: System.Xml.Xsl.XsltException: Function ‘user:sum()’ has failed. —> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. —> Microsoft.JScript.JScriptException: Function expected
Function expected
   at Microsoft.JScript.LateBinding.Call(Binder binder, Object[] arguments, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters, Boolean construct, Boolean brackets, VsaEngine engine)
   at Microsoft.JScript.LateBinding.Call(Object[] arguments, Boolean construct,Boolean brackets, VsaEngine engine)
   at Microsoft.Xslt.CompiledScripts.JScript.ScriptClass_1.sum(Object nodelist)
….

为什么?因为在MSXML里,nodelist这个nodeset参数是个IXMLDOMNodeList实例,其nextNode方法返回一个IXMLDOMNode实例。

而.NET则把这个nodeset参数映射到了System.Xml.XPath.XPathNodeIterator或其子类的实例(至于其他的Mapping,请参考XSLT Stylesheet Scripting using <msxsl:script>或后面提到的Aaron Skonnard的文章)。实际上,如果你运行上述转换的话,你看到的是XPathQueryIterator类。但不管如何,在.NET下,你只能使用.NET下的类,而不能使用那些跟MSXML有关的类/方法,譬如

<xsl:stylesheet version=”1.0″
      xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”
      xmlns:msxsl=”urn:schemas-microsoft-com:xslt”
      xmlns:user=”anything here”
>

<xsl:output method=”text” />

<msxsl:script language=”Javascript” implements-prefix=”user”>
function getType(nxpni)
{
  return nxpni.GetType().Name;
}

function sum(nxpni)
{
  var d = 0;
  while (nxpni.MoveNext())
 d += Convert.ToInt32(nxpni.Current.Value);

   return d;
}
</msxsl:script>

<xsl:template match=”/”>
   type:<xsl:value-of select=”user:getType(.)”/>
   sum:<xsl:value-of select=”user:sum(root/people)”/>
</xsl:template>

</xsl:stylesheet>

当然你也可使用C#

<xsl:stylesheet version=”1.0″
      xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”
      xmlns:msxsl=”urn:schemas-microsoft-com:xslt”
      xmlns:user=”anything here”
>

<xsl:output method=”text” />

<msxsl:script language=”C#” implements-prefix=”user”>
string getType(XPathNodeIterator nxpni)
{
  return nxpni.GetType().Name;
}

int sum(XPathNodeIterator nxpni)
{
  int d = 0;
  while (nxpni.MoveNext())
 d += Convert.ToInt32(nxpni.Current.Value);

   return d;
}
</msxsl:script>

<xsl:template match=”/”>
   type:<xsl:value-of select=”user:getType(.)”/>
   sum:<xsl:value-of select=”user:sum(root/people)”/>
</xsl:template>

</xsl:stylesheet>

Aaron Skonnard在MSDN杂志上的专栏《The XML Files 》里对此曾有专述

Extending XSLT with JScript, C#, and Visual Basic .NET

如果你想在XSLT里使用.NET下的扩展函数的话,参考微软Dare Obasanjo在MSDN上的Extreme XML专栏

EXSLT Meets XPath