Microsoft SOAP Toolkit Version 2.0 FAQ

类别:.NET开发 点击:0 评论:0 推荐:

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选项。为此,需要这样调用:
  1. 设置"ServerHTTPRequest" 属性为true。例:
    SoapClient.ClientProperty("ServerHTTPRequest") = True
  2. 需要运行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" 的步骤(请确定你有本地管理权限。):
  1. 在"Default Web Site"的属性页中选择Home Directory页。
  2. Home Directory 页,点击Configuration 按钮 在出现的"Application Configuation"对话框中选择App Mappings页。
  3. 如果.wsdl扩展不存在,点击Add按钮加入.wsdl扩展。
  4. 输入soapisap.dll的路径.。

注  由于IIS管理工具存在Bug,不能输入包含空格的文件路径。你可能需要输入指向soapisap.dll 的8.3格式的文件路径。
(如: C:\PROGRA~1\COMMON~1\MSSOAP\BINARIES\SOAPISAP.DLL)
在"Extension"文本框中输入.wsdl。如果使用Microsoft&reg; Windows&reg; 2000,在"Verbs"中选择Limit to 并输入: GET, POST, HEAD。如果使用Windows NT&reg; 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