Microsoft SOAP Toolkit Version 2.0 FAQ

    技术2022-05-11  131

    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?

    在服务器端使用MSSOAPT: 修改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工具里。 在客户端使用MSSOAPT: 在本地保存一份服务的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

    最新回复(0)