Microsoft SOAP Toolkit Version 2.0 FAQ

2002-9-11 10:02:28【作者】 畅享网 【进入论坛】
广告

Microsoft SOAP Toolkit Version 2.0 FAQ


 
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)

2.1 和XSD Namespace的关系?

你可能在SOAP应用中遇到三种版本的XSD名称空间:1999, 2000/10, 和 2001。只要消息中的名称空间和WSDL中的相同,Soap Toolkit 2.0将接受以上三种名称空间中的任何一种。 WSDLGen 已经做过更改以允许你选择生成这三种名称空间的任一种。如果你不需要为与以前的应用兼容的理由而使用1999 或 2000名称空间, 我们强烈建议你使用缺省的2001名称空间。请注意在2001标准中部分数据类型的名称有了改变,检查标准文档以获得详细情况。

2.2 怎样在客户端安装SOAP?

这的确是一个常见问题。而对这个问题的正确回答是使用.MSM 文件,它可以在Toolkit的下载页面上下载得到。当然如果你能很小心地把相应的DLL放到正确的目录下,正确的处理所有的注册项,你可能可以完成你自己的安装;然而把.MSM合并到你的安装程序中是最安全而且也是唯一被支持的方法。

2.3 为什么我的客户端会报告说不能找到服务器组件?

如果你的SOAP方法使用自定义的类型映射对象,在你的客户端可能需要一个WSML文件。WSML文件可以告诉SoapClient你的自定义映射对象的ProgID以便SOAPClient能够找到它。如果你的WSML文件中包含了你的服务器组件的ProgID信息, (就象你使用服务器上的WSML文件一样) 你可能会希望从中删除服务器组件的信息以使SOAPClient不再试图载入你的服务器组件。

(注:这段翻译的有点不知所云,附上原文:

You may need to use a WSML file on the client if your Soap methods use custom type mappers. The WSML file specifies the progid of the custom mapper for the SoapClient to know where to find it. If your WSML file specifies the progid of your server component (as it will if you use the WSML generated for the server) you may want to remove the server component information so the SoapClient doesn't attempt to load your server component.)

2.4 SOAP Toolkit是否支持COM EXE作为服务器对象?

虽然在某些情况下使用COM EXE可以工作,但这种配置并未经过测试也不被支持。我们建议在这种情况下你使用DLL将COM EXE再次包装来应用。

2.5 为什么WSDLReader不能在Script中使用?

WSDLReader 不支持IDispatch接口,因此不能在Script中使用。

2.6 为什么我的字符编码不能在NT4下使用?

Windows NT 4.0 不支持CHS:gb2312或AR:iso8859-6编码。

2.7 怎样使用SOAP Toolkit底层接口把我的XML写入消息中?

Serializer.writeXML 把XML不经转码写入消息中,文档把它当作CDATA段,但这并不是问题。

2.8 为什么我会得到Access Denied 错误?

请记住一个SOAP Toolkit 应用也是一个Web 应用。Web 服务器会有各种不同的安全措施以确定用户不能访问他无权访问的东西。也就是说, Access Denied 对一个Server应用来说经常是缺省的状态。你可以检查下面几个方面的内容:

确定你的应用程序运行时的使用的用户帐号(比如IWAM_... 或者 IUSR_... 什么的) 对WSDL和WSML文件有读权限——检查文件的访问控制列表和IIS的配置。

确定Web应用程序的用户帐号对实现你的SOAP服务的dll文件有读和执行的权限。

确定你的SOAP服务的虚拟目录对WSDL扩展名的文件有读和执行权限。

这种情况经常发生在当你在VB调试器中运行你的服务器组件时:匿名用户没有足够的权限在VB调试器中激活相应的对象。

上面的列表并不完备,但它应该可以给你一些有用的提示。

2.9 SoapConnector的HResult有何意义?

Error
Decimal
Hex

AMBIGUOUS
5000
1388

BAD_REQUEST
5050
13BA

ACCESS_DENIED
5051
13BB

FORBIDDEN
5052
13BC

NOT_FOUND
5053
13BD

BAD_METHOD
5054
13BE

REQ_TIMEOUT
5055
13BF

CONFLICT
5056
13C0

GONE
5057
13C1

TOO_LARGE
5058
13C2

ADDRESS
5059
13C3

SERVER_ERROR
5100
13EC

SRV_NOT_SUPPORTED
5101
13ED

BAD_GATEWAY
5102
13EE

NOT_AVAILABLE
5103
13EF

SRV_TIMEOUT
5104
13F0

VER_NOT_SUPPORTED
5105
13F1

BAD_CONTENT
5200
1450

CONNECTION_ERROR
5300
1464

BAD_CERTIFICATE_NAME
5301
1465

HTTP_UNSPECIFIED
5400
1518

HTTP_SENDRECV
5401
1519

HTTP_BAD_REQUEST
5402
151A

HTTP_BAD_RESPONSE
5403
151B

HTTP_BAD_URL
5404
151C

HTTP_DNS_FAILURE
5405
151D

HTTP_CONNECT_FAILED
5406
151E

HTTP_SEND_FAILED
5407
151F

HTTP_RECV_FAILED
5408
1520

HTTP_HOST_NOT_FOUND
5409
1521

HTTP_OVERLOADED
5410
1522

HTTP_FORCED_ABORT
5411
1523

HTTP_NO_RESPONSE
5412
1524

HTTP_BAD_CHUNK
5413
1525

HTTP_PARSE_RESPONSE
5414
1526

HTTP_TIMEOUT
5415
1527

HTTP_CANNOT_USE_PROXY
5416
1528

HTTP_BAD_CERTIFICATE
5417
1529

HTTP_BAD_CERT_AUTHORITY
5418
152A

HTTP_SSL_ERROR
5419
152B

WSDL_MUSTUNDERSTAND
7100
1BBC

2.10 当我改变了我的SOAP 服务器的地址时,为什么我的客户端不再工作?

最常见的理由是你需要修改二个不同的URL。SoapClient.mssoapinit 调用包含WSDL的路径(同时可能也包括WSML文件的路径)。当服务的地址改变,因此这些文件的地址也随之变动时,调用的参数也应该随之改变。在WSDL文件中还包括SOAP服务的地址——在Service的location属性中——经常有人会忘记修改这个URL 。

2.11 我怎样在未安装SOAP Toolkit的客户机上实现我自己的SOAP Client?

有一个基于Script的SOAP实现,该实现不需要安装Soap Toolkit。你可以在下列地址下载:
http://msdn.microsoft.com/downloads/samples/internet/behaviors/library/webservice/sample.asp.

2.12 怎样保护我的SOAP应用?

Soap本质上是Web应用,因此应用于Web应用上的安全原则也同样适用于SOAP。在我们这个FAQ中已经包含了最常见的一些关于安全性方面的问题。但在安全性问题过于广泛,不适合在这里讨论。下文是一篇关于SOAP安全性的文章: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Dnsoap/html/Soapsecurity.asp?frame=true。我所发现的关于Web安全性的最佳资料是Michael Howard的Designing Secure Web-Based Applications for Microsoft Windows 2000, Microsoft Press; ISBN: 0735609950。

ASPToday 也有几篇很好的安全性文章, 其中一篇是: Securing Windows 2000 IIS 5.0applications。

2.13 为什么我的客户端证书没有用?

客户端证书的一个常见问题是在一份证书中包含多个名称——Friendly name 和Subject Name。在客户端证书中的Subject name被用于Soap 客户端。 要找到subject name,你要用IE的IE/Tools菜单/Internet Options菜单项/Content,点击certificates 按钮。"Issued To" 栏目中的名字就是Subject Name。这个名字通常是X.500 名称。如果是这样,在名称中的CN部分就是我们需要的名称。请参见下文以获得更详细的资料:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Dnsoap/html/Soapsecurity.asp?frame=true

2.14 我关于Soap Toolkit 2.0的问题在何处可以获得支持?

Microsoft支持服务在以下网址:

http://support.microsoft.com/directory/overview.asp?sd=gn&fr=0。你可以选择电话支持或基于Web的支持:

http://support.microsoft.com/directory/directory.asp?sd=gn.

2.15 Windows 95是否支持Soap Toolkit?

Windows 95 不支持SOAP Toolkit中的某些系统调用,因此它不支持SOAP Toolkit。

2.16 为什么我使用底层接口的SOAP应用不能正常工作?

当底层接口对象在跨进程边界(如在IIS中Application Protection为中或高的情况下、COM+Server程序和VB调试器)使用时会出现某些marshalling方面的问题。目前,只能以inproc方式使用底层对象。这个问题将会在以后的service-pack中解决。

2.17 IIS Server返回的HTTP 状态值有何意义?

在此查看:
http://msdn.microsoft.com/workshop/networking/wininet/reference/constants/statuscodes.asp.

2.18 应该在何处问关于Web Service方面的问题?

soapsdk 的 新闻组不是很好的地方,你可以将问题发送到以下地址:
iewctrls@microsoft.com.

2.19 下一个版本的Soap Toolkit 何时发布?

Soap Toolkit 3.0 将于2001年秋季发布第一个Beta版本。

2.20 为什么我的SOAP客户端每秒发送的SOAP调用不能超过5个?

你可以修改注册表以关闭ISAPI服务器的Nagling延迟。Nagling 会给每个来自ISAPI缓冲的较小的TCP包加入一个时间延迟,这是为了能够有机会把二个较小的包合并为一个以降低网络流量。延时的时间是200 ms, 因此大多数SOAP操作都会有Nagling 引起的额外的200ms的延时。这是某些简单的通过单客户端循环调用Server端方法的基准测试结果比关闭Nagling后的测试结果偏低很多的原因。很明显,即使客户端和服务器端不花费任何时间执行,一个单线程的客户端在1秒内也不能向服务器端发送超过5个调用。在更接近现实情况的基准测试中,使用上千个客户端并行地向服务器发送请求, Nagling通常会因为减少了发送较少的包的次数而提高服务器的性能。通常,当你发现你的测试结果比你想像的要低很多的时候,可以试试关闭Nagling看是否有帮助。要关闭Nagling 延迟,你需要修改注册表项HKEY_LOCAL_MACHINE\Software\Microsoft\MSSOAP\SOAPISAP下的"NoNagling" DWORD 值 为(1)。

2.21 为什么有时SOAP Toolkit不能读取某些WSDL?

检查WSDL文件,看其中是否有import 语句。2.0 版本的toolkit还不支持import。唯一的办法是下载WSDL文件到本地,将import指向的信息copy至WSDL文件。对import的支持将在Toolkit 3.0中加入。

如果您希望与本文章的作者或其所在机构,进一步交流,请联系:畅享网 姜小姐
jill.jiang@amt.com.cn | 021-51096826-112 | 在线联系
企业信息化杂谈[原创]企业信息化的价值点探讨

我们都知道,信息技术是企业经营管理目标的手段之一。通俗点说,信息技术对企业而言就是一个工具。

IT管理—君无心[原创]文档信息安全简谈

文档信息安全工作要根据自身的需求来具体部署,也就是量体裁衣。信息安全等级划分、企业商业机密等是不同的概念。

第二届中国管理软件与IT服务年会—2..

“第二届中国管理软件与IT服务年会”于2008年7月23日-25日举行,由AMT集团与畅享网共同主办,无锡扬名高新技术产业园特别赞助支持。

CIO职场,强者生存?

在2008年,我们将继续看到CIO向商业运营方向发展。与此同时,我们也会看到商业管理人员将与技术管理人员一起竞争CIO岗位。 IT领导者的就职机会虽有不少,但其难度将会大幅提高。2……