今天作了一件非常变态的事情。
起因是这样的。我2年前写过一个web程序,当时不知道怎么闲的无聊,竟然用C++写的。当然了,写的稳定好用高效,这么长时间一直运行的很好。不过现在 麻烦来了,因为某种原因,需要让这个cgi程序提供一个webservice接口,并且调用一个webservice接口。
让C++支持webservice是有点夸张。只能自己动手了。
关于web方面的知识,我是比较bc。找了半天,在tinyfool的提示下,终于发现原来所谓post,是post数据过来,而不是我以前以为得只是 post一些参数过来。^_^。搞定这个就好办了。接收发送过来的数据,然后处理,然后把结果发送回去就行了。
发送过来的数据是通过soap发来的xml。这个问题上让我颇为犹豫。怎样做xml的解析呢?msxml?我不想用,毕竟是服务器程序,写成那样不是太丢 人了。按照我一般的习惯是用xerces-c++。不过为了这点应用放上那么大一个lib,我有点于心不忍。虽然是老程序,咱也要敬业不是?最后决定,自 己写一个小型的paser。反正只是固定的2个接口,不会有太多变化。作作字符串处理就行了。(我一个朋友说:字符串和数据库,就是程序设计的精髓。看来 还真没错)。
最后这个过程就是:1 提供一个地址xxx/xxx.exe?srv=webservice&action=req 2 当这个地址被访问的时候,把post过来的数据抓住。3 解析数据,看看是不是约定的xml文档。 4 从发送过来的xml文档中得到所需要的信息。 5 处理,然后发送回去。
调用的话,不需要多说,过程类似。
花了一晚上时间,全搞定。
完成这个本身并不难,但是需要一些基础知识。比如说理解到底什么是webservice,理解web程序工作的原理等等。我写的这个东西估计没多少人会用 得上:) 毕竟这么变态的事情不是天天发生。这篇blog的意义估计就在于:1 webservice没什么神秘的,偶尔也可以变态一下。2 基础知识要打牢。
另:我是不是有必要写一个关于webservice的普及文章?我怀疑很多用.net的人都不能真正理解webservice。看大家的反馈吧。如果强烈要求,我就写。