msxml:

12 views
Skip to first unread message

zhangfan xu

unread,
Sep 12, 2006, 10:25:36 PM9/12/06
to Technology_DB
MSXML 2.5(或 2.5 SP1)、2.6、3.0、3.0 SP1
可以并行运行,这样就可以非常灵活地在不同的分析器版本之间来回切换。实用工具
xmlinst
将帮助您执行此任务,并且还可用于以替换模式运行分析器。

MSXML 3.0 有两种安装模式:side-by-side 模式,Replace mode
模式。

98 年微软推出 IE 5,其中就已经包括了
MSXML,当时它基于的是 Extensible Stylesheet Language (XSL)
的工作草案 (working
draft)命名空间是:xmlns:xsl="http://www.w3.org/TR/WD-xsl"

99 年 W3C 正式推出 XSL Transformations (XSLT) Version 1.0
规范http://www.w3.org/TR/1999/REC-xslt-19991116命名空间是:xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

XSLT 1.0 比微软的 XSL
功能更加强大,并且已经被列为通行标准。但是已经发行的
IE 5, IE 5.5 却只支持 XSL。

后来,微软开发出了 MSXML 3.0 完全支持了 XSLT 1.0, XPath
1.0 等新标准。

当我们下载安装 MSXML 3.0
的时候,缺省的安装模式是:side-by-side 模式意思就是
MSXML 3.0 和 MSXML 2.x 共存, IE 仍然使用 MSXML
2.x,但是可以在网页中用 script 来
CreateObject("MSXML2.DOMDocument30") 调用 MSXML 3.0。

而所谓的 Replace mode 模式,就是用 MSXML 3.0 替换 MSXML
2.x。方法是:先安装 side-by-side 模式,再下载一个工具
XmlInst.exe
http://msdn.microsoft.com/msdn-files/027/001/469/XmlInst.exe 运行
XmlInst.exe -u 清除所有 MSXML 注册表信息。
再运行 regsvr32 msxml3.dll 注册 MSXML 3.0

这样,IE 5, IE 5.5 就能象 IE 6 那样支持 XSLT 1.0了(IE 6
内置 MSXML 3.0)。

但是,MSXML 3 的 Replace mode 模式却引起了 SQL 2000 Server,
Exchange 2000 Server
等软件的错误,http://support.microsoft.com/support/kb/articles/q278/6/36.asp
把微软技术支持们累得够呛。

于是乎,MSXML 4 中干脆取消了 Replace mode
模式,统统只有 side-by-side 模式。

本文回答有关 ServerXMLHTTP 对象的一些常见问题。
更多信息
1. 什么是 ServerXMLHTTP?

ServerXMLHTTP 为不同 Web 服务器之间的服务器安全 HTTP
访问提供方法和属性。您可以使用此对象在不同的 Web
服务器之间交换 XML 数据。


2. 如何安装 ServerXMLHTTP?

ServerXMLHTTP 随 Microsoft XML Parser (MSXML) 版本 3.0
或更高版本提供。您可以从以下 Microsoft Developer Network
(MSDN) 网站下载并安装 MSXML 3.0:
http://www.microsoft.com/downloads/details.aspx?amp;displaylang=en&familyid=8167837e-0983-4988-99a4-377ef5c0da2e&displaylang=en
(http://www.microsoft.com/downloads/details.aspx?amp;displaylang=en&familyid=8167837e-0983-4988-99a4-377ef5c0da2e&displaylang=en)

3. ServerXMLHTTP 具有什么平台要求?

ServerXMLHTTP 支持仅在安装 Microsoft Windows 2000
的计算机上或者在安装带 Microsoft Internet Explorer
5.01(或更高版本)的 Microsoft Windows NT 4.0
的计算机上提供。它在其他平台(如 Microsoft Windows 95
和 Microsoft Windows 98)上将失败。

由于 XMLHTTP 内部使用
WinInet,所以不支持在服务器端应用程序(例如 Active
Server Pages (ASP))、宿主在 COM+ 中的组件,或 Windows
服务中使用 XMLHTTP。
有关其他信息,请单击下面的文章编号,以查看
Microsoft 知识库中相应的文章:
238425 (http://support.microsoft.com/kb/238425/)
不支持在服务中使用 WinInet

4. XMLHTTP 和 ServerXMLHTTP 之间的区别是什么?

XMLHTTP 为客户端应用程序而设计,并依赖于基于
Microsoft Win32 Internet (WinInet) 而构建的 URLMon。ServerXMLHTTP
为服务器应用程序而设计,并依赖于新的 HTTP
客户端堆栈 WinHTTP。ServerXMLHTTP
提供了可靠性和安全性,并且是服务器安全的。有关更多信息,请参见
MSXML 软件开发工具包 (SDK) 文档。

5. 如何在 XMLHTTP 和 ServerXMLHTTP 之间做出选择?

正如其名称所示,ServerXMLHTTP
推荐用于服务器应用程序,而 XMLHTTP
推荐用于客户端应用程序。XMLHTTP
具有一些优点,如支持缓存和自动发现代理。它可以在
Windows 95 和 Windows 98
平台上使用,并且非常适合单用户桌面应用程序。


6. 什么是代理配置实用工具?

WinHTTP 代理配置实用工具 Proxycfg.exe 允许将 WinHTTP
配置为通过代理服务器访问 HTTP 和 HTTPS 服务器。由于
ServerXMLHTTP 组件依赖于 WinHTTP
代理设置,因此在部署和安装使用 WinHTTP
的应用程序的过程中,管理员可以使用 Proxycfg.exe
实用工具。有关更多信息,请参见下面的 Microsoft
知识库文章:
289481 (http://support.microsoft.com/kb/289481/) 可能需要运行
Proxycfg 工具以使 ServerXMLHTTP 正常工作
7. ServerXMLHTTP 是否支持 SSL 和数字证书?

ServerXMLHTTP 和 XMLHTTP 组件在 MSXML3 中对 HTTPS
的支持比较有限。具体说就是,它们不完全支持用于身份验证的安全套接字层
(SSL) 证书。这些组件虽然支持 HTTPS
协议,但如果服务器要求客户端证书,请求将会失败。

ServerXMLHTTP 在 MSXML 3.0 Service Pack 1 中包括了 SSL
证书支持。


8. ServerXMLHTTP 有什么优点?· 通过使用
ServerXMLHTTP,可以在本地和远程系统之间以流或 XML
文档的形式交换 XML 数据。
· 由于基础协议为 HTTP 或
HTTPS,因此可以在防火墙后的系统之间交换数据。
· ServerXMLHTTP 可用于从不同的环境(如 Active Server Pages
(ASP)、Microsoft Visual Basic 和 Microsoft Visual C++)发送 HTTP
请求。

9. ServerXMLHTTP 存在什么限制?

可同时存在于单一进程中的 ServerXMLHTTP
实例数主要取决于可用于系统上应用程序的内存大小。但是,其他因素(如
CPU
处理能力或者可用的套接字连接)会进一步限制可以同时处于活动状态的实例数。


就 MSXML 3.0
而言,可同时存在于单一进程中的最大实例数为
5,460。


10. 在哪里可以找到有关 ServerXMLHTTP 的更多信息?

本文的大部分信息都取自 MSXML SDK,它可以从以下 MSDN
网站的 XML 部分下载:
http://msdn.microsoft.com/xml/default.asp
(http://msdn.microsoft.com/xml/default.asp)
此站点提供关于 MSXML 技术的最新信息。


另外,关于MSXML的更多信息,您可以参考以下文章:

ID: Q278969 INFO: How to Redistribute the Microsoft XML Parser
[MSXMLkb]
http://support.microsoft.com/support/kb/articles/q278/9/69.asp

ID: Q285081 INFO: XMLHTTPRequest Object Requires IE 5.0 or Later
[MSXMLkb]
http://support.microsoft.com/support/kb/articles/q285/0/81.asp

ID: Q290761 Frequently Asked Questions about ServerXMLHTTP
[MSXMLkb]
http://support.microsoft.com/support/kb/articles/q290/7/61.asp

zhangfan xu

unread,
Sep 12, 2006, 10:28:28 PM9/12/06
to Technology_DB
XMLHTTP发送HTTP请求失败的可能性分析
(一) Access Denied
TomoSoft ID Number: Q20011122

Article last modified on 11-22-2001


--------------------------------------------------------------------------------

The information in this article applies to:

Microsoft XML, versions 2.6, 3.0, 3.0 sp1

--------------------------------------------------------------------------------

提要
现在我们越来越离不开XMLHTTP对象和ServerXMLHTTP对象了。为了更好地驾驭,一定要搞清楚她们的特性,以及在何种情况下她们会闹别扭。

本文尽可能地给出她们的出错的各项相关报告。由于我自己的个人经验教训,我更关注“Access
Denied”这个话题。其他方面的报告请各方高士整理一下了。

我们将会混着XMLHTTP和ServerXMLHTTP说,虽然她们从底层协议到特性均不相同,但是她们的共同之处还是挺多的。

“ACCESS DENIED”和“Permission Denied”
如果我们用ServerXMLHTTP对象访问一个用了集成Windows验证的web站点时,传递的NT用户名密码无效或者没有相应的权限,自然会遭遇到Access
Denied,这一点毋庸置疑。

也就是说,虽然微软没有禁止传递空的用户名密码,但是实践证明这么做,可能会给你带来点麻烦。

我的一次经历就是我当前的子线程会默认从父线程那里继承Security
Context,而父线程的用户身份是有权限的,但是子线程调用ServerXMLHTTP对象提交一个HTTP操作,就会得到一个“Access
Denied”。那里我就是没有传递用户名和密码。

所以我们的第一个定理就是:

定理1
但凡你能在XMLHTTP或者ServerXMLHTTP的open方法时传递用户名密码,就请一定传,即使这时的进程的运行身份是邮件管理员。

它附带的一个推论是:

即使你曾经给open方法传递空用户名密码测试成功,也不意味着未来在其他环境中同样的代码仍然可以奏效。

有时候,你在XMLHTTP或ServerXMLHTTP的open时传递的NT用户名密码,它是有权限执行该项HTTP操作的,但是它偏偏也报告“Access
Denied”。这又是为什么呢?

微软的一种解释就是,这是由它们的底层实现的特性所决定的。:)

对于XMLHTTP:

当XMLHTTP对象向一个Remote
URL发送HTTP请求时,它用的是the Internet Explorer
URLMON和WinInet组件。因为这些组件是被设计在“A Regular
User
Process”这种情况下使用的,而IIS和ASP会对URLMON和WinInet的某些功能性造成不良影响。

所以微软说,不赞成在ASP脚本页面中使用“Microsoft.XMLHTTP”对象(即XMLHttpRequest)来向其他Web
Servers发送请求。因为这可能导致一些无法预料的后果,如肯定是不能连接SSL(HTTPS)
Server的,等等。

这个问题在Knowledge Base
的Q304420一文中也有论述。在这篇《XMLHTTP Open Method Fails
with "Permission Denied"
Error》的文章中,描述的现象就是:


虽然文章没有说为什么,但是我相信就是上面所阐述的道理。

所以依照微软的建议,这里有了定理2:

如果你要从Server-Side ASP
script中做一个HTTP请求,请使用ServerXMLHTTP对象。

对于ServerXMLHTTP:

MSXML 3.0使用的是Windows HTTP Services(WinHTTP)。

如果在调用ServerXMLHTTP代码的机器上,WinHTTP Proxy
configuration
setting没有配置或者没有正确配置,都会造成“Access
Denied”!

这是因为ServerXMLHTTP对象需要依赖于WinHTTP来建立server-to-server的HTTP连接。这时可能会有两种可能:

一是没有运行Proxycfg.EXE来正确地设置proxy setting;

二是在运行Proxycfg.EXE配置之后,没有重新启动IIS。

至于如何下载Proxycfg.EXE,如何配置proxy
setting,请参看《Q289481 INFO: Proxy Configuration Utility Must Be
Run for ServerXMLHTTP to Work》,这里不再详述。

(先写这么多吧,To Be Continued…)

Reply all
Reply to author
Forward
0 new messages