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部分就是我们需要的名称。请参见下文以获得更详细的资料:
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 的 新闻组不是很好的地方,你可以将问题发送到以下地址:
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中加入。