Microsoft SOAP Toolkit Version 2.0 FAQ
Translate By Zee
Microsoft Corporation
August 2001
Summary: This article provides in-depth answers to frequently asked development questions regarding Microsoft SOAP Toolkit 2.0. (12 printed pages)
1.1 Soap Toolkit的最新版本是什么?
版本2.0 SP2,发布于2001年6月21日,可以在:
http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/580/msdncompositedoc.xml 下载。
1.2 我怎样使用Soap trace utility?
- 修改WSDL中soap:address 元素的location属性,将端口改为8080。例如:假设WSDL中包含<http://MyServer/VDir/Service.wsdl>,将它改为: http://MyServer:8080/VDir/Service.wsdl。
- 在服务器端运行MSSOAPT。
- 如果你不想看到HTTP头信息的话,选择“File-> New-> Formatted Trace ”;如果你想看到HTTP头信息如ContentType 和 SoapAction,选择“File-> New-> Unformatted Trace”。
- 在Trace Setup对话框中点击OK 以使用缺省值。
现在对所有在WSDL中指定的地址的请求/回复消息将会显示在Trace工具里。
- 在本地保存一份服务的WSDL文档副本。
- 修改WSDL中soap:address 元素的location属性,将地址和端口改为localhost:8080 ,并记下原来WSDL的地址和端口号。例如:假设WSDL中包含<http://MyServer/VDir/Service.wsdl>,将它改为: <http://localhost:8080/VDir/Service.wsdl> 并记下"MyServer"。
- 在客户端运行MSSOAPT。
- 如果你不想看到HTTP头信息的话,选择“File-> New-> Formatted Trace ”;如果你想看到HTTP头信息如ContentType 和 SoapAction,选择“File-> New-> Unformatted Trace”。
- 在Trace Setup对话框中,输入在第二步中记下的地址和端口作为destination host 和destination port, 然后点击OK。
现在所有在客户端中对指定的地址的请求/回复消息将会显示在Trace工具里。
1.3 为应用SSL,我需要作些什么?
假定你的Server已经配置成需要SSL,你要做的只是修改你的WSDL文件中的URL(如果使用SOAP底层对象,就修改Soap Connector URL),把http改为https。在客户端设置
UseSSL不是必须的。如果这样不行,最大的可能是Server的证书过期或者Server要求客户端证书。 要注意的是我们常常听到:“它在HTTP的情况下工作得很好,可是在HTTPS却出错。”。如果根目录被配置成要求SSL连接,它在HTTP的情况下将不会工作,因此这句话仅仅意味着你的Server没有被配置成要求SSL连接。
一些其他常见问题:
- 请确认你的证书是有效的而且有可信任的根——双击打开证书文件,检查是否有警告。
- 确认你的服务器的SSL配置正确——服务器端证书有效而且有可信任的根证书,而且根证书安装在LOCAL_MACHINE存储中。
- 你不能把localhost作为主机名——URL中的主机名必须与服务器端证书中的机器名相同。
- 如果你的机器上没有安装MMC工具,要查看你的证书可以使用IE——在IE的Tools菜单,Options菜单项下的Content/Certificates/。
- 如果你将你的虚拟目录配置为要求客户端证书——你可以使用IE访问该虚拟目录以确定你要使用什么证书来访问该站点。IE将显示IE服务器信任的客户端证书的列表。如果你使用IE5.5,请取消IE安全性设置中的"Miscellaneous\Don't prompt for client certificates selection when no certificates or only one certificate exists"选择。
你可以在:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Dnsoap/html/Soapsecurity.asp?frame=true.找到更进一步的信息。
1.4 为什么SMO Generator没有安装?
是否安装SMO Generator取决于你机器注册表中是否存在"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\6.0\Setup\Microsoft
Visual Basic\ProductDir"的键值,你可以检查注册表确认是否存在该键值。
(注:SMO Generator=SOAP Messageing Object Generator ,是一个VB6 AddIn,其实就是说要安装了VB6才会安装SMO Generator。)
1.6 我怎样使Soap Toolkit可以与Apache交互?
在版本2.1以前, Apache 要求所有的SOAP参数都要带有xsi:type属性 。同时, Soap Toolkit 通常不会在SOAP Message中发送xsi:type。在Apache version 2.1中,如果类型已经在配置描述符(注:deployment descriptors,不知何义。)定义过,则可以不需要再指定xsi:type 属性。然而, Apache服务还没有使用WSDL,因此,为了使SOAP Toolkit客户能够与Apache server交互,必须再为他创建一个WSDL文件。Soap Toolkit RTM版经测试可以成功的与Apache 2.2交互。
另一个小窍门是你可以手工修改生成的WSDL文件,把Apache难以处理的类型修改为"xsd:anyType"。这将使Toolkit认为这个参数是variant类型,于是它会包含参数的类型信息,而这正是Apache需要的。
1.9 WSDL是什么?
WSDL是一个标准,是一种结构化的描述SOAP消息和Web服务的方法。Soap Toolkit依据WSDL创建和解释SOAP消息 ,因此,SOAP Toolkit 2.0的客户端和服务端都需要WSDL文档。如果你希望Soap Toolkit 2.0 客户端与一个不支持WSDL的SOAP 服务器交互,你必须自己创建一个WSDL文档描述SOAP 服务器需要的SOAP 消息格式。我发现创建这个WSDL最简单的办法是用VB创建一个哑接口,这个接口定义的方法和SOAP服务器的相同,然后,使用WSDLGen生成这个VB dll的WSDL文件。你当然也可以自己写WSDL文档。如果你希望用一个不支持WSDL的SOAP 客户访问SOAP Toolkit 2.0 服务,你可以把WSDL作为SOAP Message格式的描述,并把它作为Client端创建SOAP Message的依据。
1.10 在哪里可以找到WSDL标准?
W3C已经接受了WSDL 1.1 规范,你可以在
http://www.w3.org/TR/wsdl找到相应的标准。
1.11 当我在ASP里运行我的SOAP客户端时,为什么我不能读到WSDL文档?
WSDL Reader 使用MSXML的http接口将WSDL Load到DOM。在ASP中运行MSXML HTTP stack 需要设置ServerHTTPRequest选项。为此,需要这样调用:
- 设置"ServerHTTPRequest" 属性为true。例:
SoapClient.ClientProperty("ServerHTTPRequest") = True
- 需要运行proxycfg.exe (见Knowledge Base article Q289481)。
另一个办法是使用本地的WSDL文件:
mssoapinit ("C:\wsldfiles\MyProject.wsdl")
1.11 WSML是什么?
WSML可以认为是SOAP Toolkit的配置文档。它包含将WSDL中描述的SOAP消息映射到COM接口的信息。比如COM的一些信息如ProgID和DispID。 WSML不会成为标准,因为它仅仅对Soap Toolkit才有意义。
1.12 我为什么要使用SMO而不是SOAP Toolkit的高层对象接口?
虽然这二者的功能有一定的重合,但各有侧重:SOAP Toolkit的高层对象一般最好用于传统的程序间RPC调用。而SMO比较适用于面向消息的应用。如果你希望用SOAP交换XML文档,SMO是最佳的选择。如果你希望用SOAP在远程机器上执行某些操作,高层对象接口可能会是更好一些的选择。SMO提供了一个接口, 可以比高层对象接口更容易地创建复杂的XML 文档。
1.13 什么时候我才需要使用ISAPI listener而不是ASP?
我的回答是几乎所有的时候。ISAPI 比ASP更快而且更容易使用,所以除非你要做一些ISAPI不能做的事或者你使用SMO,建议你使用ISAPI。
1.14 为什么ISAPI不能在我的虚拟目录运行?
当ISAPI安装后,它会把自己注册为".WSDL" 的处理者。Soap Toolkit 2.0会在IIS服务层的"App Mapping" 中创建".WSDL"扩展名和soapisap.dll的关联。如果"App Mappings"在IIS Web Service的下级结点中被改变过(例如在"Web Site"或者"Virtual Directory"层),由于它们的优先级高于Soap Toolkit 2.0的安装设置, IIS服务层的".WSDL"的映射不会在这些结点中被继承。在这种情况下,你可以用MMC管理工具在"App Mappings"中添加相应的映射。
下面举例说明在IIS 5.0的"Default Web Site"中使用MMC管理工具添加"App Mappings" 的步骤(请确定你有本地管理权限。):
- 在"Default Web Site"的属性页中选择Home Directory页。
- 在Home Directory 页,点击Configuration 按钮 在出现的"Application Configuation"对话框中选择App Mappings页。
- 如果.wsdl扩展不存在,点击Add按钮加入.wsdl扩展。
- 输入soapisap.dll的路径.。
注 由于IIS管理工具存在Bug,不能输入包含空格的文件路径。你可能需要输入指向soapisap.dll 的8.3格式的文件路径。
(如: C:\PROGRA~1\COMMON~1\MSSOAP\BINARIES\SOAPISAP.DLL)
在"Extension"文本框中输入.wsdl。如果使用Microsoft® Windows® 2000,在"Verbs"中选择
Limit to 并输入: GET, POST, HEAD。
如果使用Windows NT® 4,则不要填写Exclude文本框。选中"Script Engine"并不选"Check that files exist"。最后,点击
OK完成新映射的输入。
注 虽然上述步骤用于设置"Default Web Site"的"App Mappings" ,对"Virtual Directory"的设置也是这样的。
1.15 Soap Toolkit是否支持数组?
SOAP Toolkit支持一维简单类型数组、复杂类型数组和多维数组。在下一个Service Pack中将进一步加强对数组类型的支持。
1.19 Soap Toolkit 的fault Detail 元素中包含了什么信息?
SOAP中的detail 部分是名称空间限定的,它使用下面的名称空间:
http://schemas.microsoft.com/soap-toolkit/faultdetail/error/
所有的Soap Toolkit错误信息都具有如下的格式:
<soap:fault....>
<detail>
<mserror:errorInfo
xmlns:mserror="http://schemas.microsoft.com/soap-
toolkit/faultdetail/error/">
<mserror:returnCode></mserror:returnCode>
<mserror:serverErrorInfo>
<mserror:description></mserror:description>
<mserror:source></mserror:source>
<mserror:helpFile></mserror:helpFile>
<mserror:helpContext></mserror:helpContext>
</mserror:serverErrorInfo>
<mserror:callStack>
<mserror:callElement>
<mserror:component></mserror:component>
<mserror:description></mserror:description>
<mserror:returnCode></mserror:returnCode>
</mserror:callElement>
</mserror:callStack>
</mserror:errorInfo>
</detail>
因此,假定我们需要产生详细的错误信息,我们要创建扩展的
errorinfo 段:段中的根元素是
mserror:errorInfo 元素,它的第一个子元素是
returnCode,其中包含HRESULT错误编码。
如果服务器上发生的错误同时也包括一个
errorinfo 对象(原文:If the failure was caused by something providing an
errorinfo object itself on the server,翻译存疑)(如:
servercomponent 已被调用错误(?)), 这时 (也仅在这时,因此下面的步骤不总是需要的。)我们要创建
mserror:serverErrorInfo段。该段中的所有部分都是可选的。——虽然当存在一个帮助文件时你总是可以得到
helpContext元素——段中的元素仅当服务器存在该信息时才会出现。如果存在这些信息,它们会在客户端的
Error 对象的相应属性中出现。
1.20 为什么我会得到"library not registered"错误?
"library not registered"错误可能会在试图执行: Server.CreateObject("MSSOAP.SoapServer")时出现。
该错误的产生原因是SOAP类型库的注册表项没有赋予"Everyone"组读的权限。产生该错误的最可能的原因是安装过Crystal Reports 8.0。
(见
http://support.microsoft.com/support/kb/articles/Q266/6/21.ASP)
-----------------------------------------
第一次翻译 :)
Part 2 under work
本文地址:http://com.8s8s.com/it/it46298.htm