FIX: Winhttp.dll 导致了内存泄漏时 Windows 集成身份验证失败

文章翻译 文章翻译
文章编号: 826216 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

当试图使用从客户端使用 Microsoft SOAP 3.0 的 Web 服务时,您可能会注意到了内存泄漏。

注意当您通过使用下面的代码设置为 SOAP 客户端对象为 Windows 集成身份验证的身份验证方案时,您会发现此行为:
objSoapClient.ConnectorProperty("WinHTTPAuthScheme") = 2
笔记"objSoapClient"是 SOAP 客户端对象的名称。

原因

SOAP 客户端对象使用 Winhttp.dll 组件。如果 Winhttp.dll 组件中发生内存泄漏 Windows 集成身份验证失败,您会注意到在"症状"一节中提到的行为。

解决方案

可以从 Microsoft 获得支持的修补程序。但是,此修补程序被用于解决本文所述的此问题。此修补程序仅应用于出现这一特定问题的系统。

是否可供下载此修补程序没有"提供修补程序下载"部分中,在这篇知识库文章的顶部。如果未出现本部分,将申请提交到 Microsoft 客户服务和支持以获取此修复程序。

注意如果出现其他问题,或者如果需要进行任何故障诊断,则您可能不得不创建单独的服务请求。将正常收取支持费用将应用于其他支持问题和不需要进行此特定的修补程序的问题。有关完整列表的 Microsoft 客户服务和支持的电话号码,或创建一个单独的服务请求,请访问下面的 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support
注意"提供修补程序下载"窗体所显示的此修复程序是可用的语言。如果您看不到您的语言,则是一个修复程序不能用于该语言。这样的英文版具有文件属性 (或更高版本) 下表中列出。其格式为协调通用时间 (UTC) 列出日期和时间对这些文件。当您查看文件信息时,将转换为本地时间。 若要 UTC 与本地时间之间的时差使用控制面板中的日期和时间工具中的 时区 选项卡。

Microsoft Windows 2000 操作系统

 

    Date         Time   Version            Size    File name
   --------------------------------------------------------------
   27-Aug-2003  05:22  5.1.2600.1264     310,784  Winhttp.dll      
  
 
				

Windows XP 操作系统

 

      Date         Time   Version            Size    File name
   --------------------------------------------------------------
   21-Aug-2003  05:46  5.1.2600.1264     945,152  Winhttp.dll      
  
  
 
				

状态

Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中的错误。

更多信息

重现行为的步骤

  1. 启动 Microsoft Visual Studio.net。
  2. 文件 菜单上指向 新建,然后单击 项目
  3. 项目类型 框中,单击 Visual Basic 项目Visual C# 项目,然后单击 模板 下的 ASP.NET Web 服务
  4. 命名该项目 SampleWebService
  5. Service1.asmx 文件中取消注释 HelloWorld Web 服务方法。
  6. 生成 菜单上单击 生成解决方案
  7. 单击 开始,然后单击 运行
  8. 打开 框中键入 inetmgr,然后单击 确定
  9. Internet Information Services 中在窗口中,展开 默认网站
  10. 用鼠标右键单击 SampleWebService,然后单击 属性
  11. SampleWebService 属性 对话框中单击 目录安全性 选项卡。
  12. 匿名访问和身份验证控制,下单击 编辑
  13. 身份验证方法 对话框中单击以选中 集成 Windows 身份验证 复选框。

    注意请确保清除其他所有复选框 (在 身份验证方法 对话框中。
  14. 单击 确定 两次以关闭 SampleWebService 属性 对话框。
  15. 关闭 Internet Information Services 窗口。
  16. 启动 Microsoft Visual Basic 6.0。
  17. 创建一个标准 EXE 项目。默认状态下,创建 Form1。
  18. 向 Form1 中添加 命令按钮 控件和 ProgressBar 控件。如果工具箱不包含 ProgressBar 控制,请按照下列步骤操作:
    1. 项目 菜单上单击 组件
    2. 单击以选中 Microsoft Windows 公共控件 6.0

      注意如果 组件 对话框中的 控件 选项卡不包含 Microsoft Windows 公共控件 6.0,单击 浏览 并单击 MSCOMCTL.OCX,然后单击 打开
    3. 单击 确定 以关闭 组件 对话框。
  19. Command1 控件的在 单击 事件中粘贴以下代码:
    Dim objSoapClient As Object
    Dim wsdl As String
    Dim MySoapResponse As String
    Dim i As Long
    
    ' The wsdl variable contains the physical path of the wsdl in the client.
    wsdl = "C:\SoapClient\SoapTestSrv.wsdl"
    Set objSoapClient = CreateObject("Mssoap.SoapClient30")
    objSoapClient.MSSoapInit wsdl
    
    ' The value of AuthUser/AuthPassword must be incorrect for a memory leak to occur.
    objSoapClient.ConnectorProperty("AuthUser") = "TestUserid"
    objSoapClient.ConnectorProperty("AuthPassword") = "TestPassword"
    objSoapClient.ConnectorProperty("WinHTTPAuthScheme") = 2
    
    ' Replace ServerName with the name of the server where the Web service Service1.asmx is hosted.
    objSoapClient.ConnectorProperty("EndPointURL") = "http://ServerName/SampleWebService/Service1.asmx"
    
    For i = 1 To 500000
        On Error Resume Next
        On Error GoTo Error
        MySoapResponse = objSoapClient.HelloWorld
    
        'If you run this code, you will notice a memory leak.
        If (i Mod 500000) = 0 Then
            ProgressBar1.Value = ProgressBar1.Value + 1
        End If
    
    Error:
        MsgBox (Err.Description)
    Next
    
    Set objSoapClient = Nothing
  20. 运行 菜单上单击 开始。显示 Form1。
  21. Form1,上单击 $ Command1
注意请注意,使用 Winhttp.dll 组件,还使用 Windows 集成身份验证的任何应用程序中此行为。

参考

有关在 WinHTTP 身份验证的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站:
http://msdn2.microsoft.com/en-us/library/aa383144.aspx
有关更多的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
305965如何: 使用 XML Web 服务方法使用 SOAP 工具包 2.0

属性

文章编号: 826216 - 最后修改: 2007年11月15日 - 修订: 1.7
这篇文章中的信息适用于:
  • Microsoft SOAP Toolkit 3.0?当用于
    • the operating system: Microsoft Windows XP
    • the operating system: Microsoft Windows 2000
关键字:?
kbmt kbautohotfix kbhotfixserver kbqfe kbqfe kbwebservices kbbug kbfix KB826216 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 826216
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com