Hello HailStorm !
小气的神 2002-02-20
Article Type: OverView
难度等级:2/9
版本:1.26
HailStorm现在被Microsoft命名为.NET My Services,不过我喜欢用HailStorm这个名字,目前它还没有公布Beta版本,正在进行M1阶段的开发,估计今年(2002)的年中会Finally Released。不知道会是Beta还是RC的版本会真正发布,外界认为会是整个功能的一半功能,也就是M1的部分。另一方面HailStorm还需要一些外部的条件,比如目前Passport的下一个版本,新的Windows.NET OS系列,实现一些有关安全和事务的公共协议等等。
下面的记录是基于2001.10.22日的HailStorm SDK ,最少运行在PDC 版本的Visual Studio .NET上,也就是RC1之后的版本上,RTM也是OK的。现在一些网站包括微软网站已经可以下载得到这个SDK。这一次我们的主题是从安装这个SDK起步认识Hailstorm。不过事情的发展并非一帆风顺,这种戏剧性的变化在之后的很多日子被我认为是如此的苦涩和充满“中国特色”。
当然安装一个软件不会让任何人太记忆深刻,安装前我细细阅读了几遍安装文档,当然事后我承认也许有疏漏的地方,因为我当时的焦点在于将Visual Studio从Beta2 升级到RC3上。下面这些是安装时要特别注意的:
1. OS必须是W2K+SP2或XP RC1+
2. IIS 和 服务扩展必须安装,并且运行OK。
3. SQL 2000 + SP1+ 并且SDK Setup程序不接受空的数据库密码
4. Microsoft SOAP Toolkit 2.0 + SP1+ 并且自带的Sample可以运行。
5. Windows Scripting Host(WSH) 5.5+, IE 5.5 SP1+
6. Microsoft Visual Studio.NET RC1+
安装过程很顺利(建议这些都安装在一台机器上,SQL使用sa用户)。
SDK安装完成之后,如果你已安装了VS.NET 那么你可以继续安装SDK for VS.NET,当然这是我当时最感兴趣的,同样安装也很顺利。
成功后桌面上会有两个Sample的快捷键。一个是控制台的Sample,一个是GUI的Sample,按照文档说明,根据文档描述如果一切顺利,你可以正确的运行这些Sample, 控制台方式的将连续弹三个消息框然后退出;而GUI的将可以象IE一样浏览网页并且收集Favorites。看得出两个Sample都是用13个Services中的.NET FavoriteWebSites Services。可是我运行的结果不是连续三个消息框,而是一个致命的对话框。
当然第一个反应是安装有问题,但是安装程序并未报告任何错误。我又到另外的一台机器上安装,结果同样,在网络上寻找有关HailStorm的同时,我才发现有关这方面的文章资料很少,中文的就更少了。但是codeProject和O'REILLY Network的Diana Mitra和Jones 分别都撰文讨论了自己用Managed C++和Python与HailStorm SDK交互的情况,虽然这些文章都没有描述我遇到的情况,但使得我可以学习有关HailStorm的一些知识,特别是Jones用Python的文章让我对HailStorm的工作原理有了更多的认识。我找到了SDK中的hspost.exe,这是一个很原始的工具,可以用它执行HSDL(.NET My Services Data-Manipulation Language)指令来交互获得结果。终于有一天当我执行下面的指令:
C:\Microsoft .NET My Services SDK\Bin>hspost –d content -f insertRequest.xml -o ccBoy -s myServices
<?xml version='1.0'?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:hs="http://schemas.microsoft.com/hs/2001/10/core">
<s:Header>
<path xmlns="http://schemas.xmlsoap.org/rp/">
<action>http://schemas.microsoft.com/hs/2001/10/core#fault</action>
<rev></rev>
<from>http://VSDOTNET</from>
<id>72D64FD0-1BD6-11D6-A744-00B0D0E302B3</id>
<relatesTo>72D4C8A0-1BD6-11D6-A744-00B0D0E302B3</relatesTo>
</path>
<hs:response>
</hs:response>
</s:Header>
<s:Body>
<s:Fault>
<s:faultcode>Client</s:faultcode>
<s:faultstring>Illegal operation</s:faultstring>
<s:detail xmlns="http://schemas.microsoft.com/hs/2001/10/core">
<faultResponseAction>Correct</faultResponseAction>
<faultChain>
<fault>
<code>0x70008</code>
<shortDescription>Illegal operation</shortDescription>
<longDescription>
An unexpected error has occurred. SQL message: 'RAISERROR 无法在 sysmessages 中找到错误 76004 所对应的条目。'. SQL error code: 2758. Check the request.
</longDescription>
</fault>
</faultChain>
</s:detail>
</s:Fault>
</s:Body>
</s:Envelope>
仍然还有错误出现,可是我们可以下这样的结论:程序确实运行了,但是和数据库交互的部分发生了错误。我想了一阵才反应到可能是SQL自定义错误的问题了,因为76004不是SQL Server中定义的。然后在安装程序的hsadmin.sql中发现这样的SQL语句:
EXEC sp_addmessage @msgnum = 76002, @severity = 10,
@msgtext = N'%08x [XDB] Select count _.',
@replace = 'REPLACE'
EXEC sp_addmessage @msgnum = 76003, @severity = 10,
@msgtext = N'%08x%08x [XDB] New change number __.',
@replace = 'REPLACE'
EXEC sp_addmessage @msgnum = 76004, @severity = 10,
@msgtext = N'%08x [XDB] Begin InternalOpId _.',
@replace = 'REPLACE'
有经验的人已经知道问题出在那里了。上述的语句在中文简体的SQL Server中是会出错的。之后我试图手工的将这十几个msgnum手工的加入到我的SQL Server中,结果似乎没有打个补丁这么简单。最后的解决办法是Uninstall我的中文版SQL Server,然后安装英文版本。之后我们可以获得下面正确的结果了
C:\Microsoft .NET My Services SDK\Bin>hspost –d content -f insertRequest.xml -o ccBoy -s myServices
<?xml version='1.0'?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:hs="http://schemas.microsoft.com/hs/2001/10/core">
<s:Header>
<path xmlns="http://schemas.xmlsoap.org/rp/">
<action>http://schemas.microsoft.com/hs/2001/10/core#response</action>
<rev></rev>
<from>http://localhost</from>
<id>4E1CD820-1C70-11D6-A749-00B0D0E302B3</id>
<relatesTo>4E184290-1C70-11D6-A749-00B0D0E302B3</relatesTo>
</path>
<hs:response>
</hs:response>
</s:Header>
<s:Body>
<hs:insertResponse xmlns:hs="http://schemas.microsoft.com/hs/2001/10/core" status="success" selectedNodeCount="1" newChangeNumber="351"/>
</s:Body>
</s:Envelope>
结论是:对于这个版本的SDK,最好和保险的建议是安装英文版本的SQL 2000.同时这也是我花了很多时间获得的教训。建议你安装之后可以试一下上面的命令,保证安装真正的成功。
insertRequest.xml 是下面内容的一个简单xml文档
<hs:insertRequest select="/"
xmlns:hs="http://schemas.microsoft.com/hs/2001/10/core"
xmlns="http://schemas.microsoft.com/hs/2001/10/myFavoriteWebSites">
<favoriteWebSite >
<title xml:lang="en">Hello. HailStorm</title>
<url>http://www.microsoft.com</url>
</favoriteWebSite>
</hs:insertRequest>
如果我们不是过于迷恋IDE,那么从手工方式中我们也许可以获得更多的知识和体验,有时候最简单的方式往往使我们更容易接触到事物的本质,最后发现错误的原因。
还有一个常见的错误,我也贴出来,也许对你会有帮助:
C:\Microsoft .NET My Services SDK\Bin>hsprov -s myProfile -l http://vsdotnet -o ccBoy
Error 0x00000012 submitting initial query to myServices
The error 12 is a very generic error which means that the server is not reachable and could happen due to a variety of reasons.
Here is a list of known issues that could cause error 12
1. SQL server has a blank password for the administrator, while installing SQL server select the defaults.
2. Do not try to provision myServices but any one of the other services.
3. During Installation of .Net My Services make sure you select the windows authentication to access the SQL server. or give a non blank password.
4. If all the above are the steps that you have taken already make sure that you can reach the www service using http://machinename/myService this should throw up a authentication dialog box.
上面信息来源Microsoft新闻组。
建议你仔细的阅读SDK中的安装文档,Microsoft在10月份又单独更新了SDK的安装Readme
而后SDK for VS.NET的两个例子也可以成功的执行了,下面是其中的一个运行结果:
目前HailStorm还是一个Alpha版本,不过我丝毫没有小瞧它,事实上,它比Visual Stduio.NET的Alpha版本要稳定和成熟的多,有人戏称Microsoft Alpha版本的软件都像“玩具”,HailStorm这次也不例外,不过真实的原因可能是因为它还不具有实际的商业价值,而不是技术。这一点上Microsoft似乎超乎寻常(haha)。这个版本的SDK包括Alerts,ApplicationSettings,Calendar,Categories,Contacts,Documents,FavoriteWebSites,Inbox,Lists,Locations,Presences,Profile,Services,Wallet共13个Services,这些服务中的Alerts,Calendar,Contacts等已经充分的引起开发者和最终用户的兴趣,Casey Chesnut已经在网上展示了他的myVoices案例: 利用bevocal.com这样公司提供的Gateway服务,依靠ASP.NET和HailStorm提供Favorites,Lists,Contacts,InBox等服务通过VoiceXML和手机进行双向的语音通讯。也就是说7个月前dotNET中向人们描述的几个突出的应用场景现在已经可以在现实中看到实例了。当然在将技术观点转化为普通和商业人士的观点方面,dotNET策略还不算完美。不过我认为整个HailStorm具备了第二代WebServices的一些特性,相对于现在蹒跚跌走而来刚刚脱离demo的第一代WebServices来说,它是超前的。但就其展现的可以预见的商业模式来说,它目前第一代的Web Services一样含糊迷涩。
特别:
本文CSDN署名首发,转载或改编请注明作者和出处。如果有问题,请发电子邮件给new2001@msn.com
以上文字和图片涉及其他人的隐私和个人权利,所有文字和图片只用于内部交流,不作任何新闻发表和商业用途。