2017-01-16 84 views
2

我有一个VB6应用程序只能在特定条件下运行。当它失败(下面的语句发送),它生成一个应用程序需要提琴手在某些电脑上正确执行

运行时错误“-2147012867(80072EFD)”:与服务器的连接不能建立

有趣的是,它总是当Fiddler运行时运行。在某些机器上,无论Fiddler是否运行,它都会运行,但在其他机器上它只会在Fiddler运行时运行。 Fiddler甚至不必捕捉流量就可以运行。

该请求是对https网站。

的代码看起来是这样的:

Set xhr = CreateObject("WinHttp.WinHttpRequest.5.1") 
xhr.open "POST", sUrl, bAsync 
xhr.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
xhr.setRequestHeader "Content-Length", Len(sBody) 
xhr.send sBody 

我读过Telerik的文章,Help! Running Fiddler Fixes My App???,但没有建议的解决方案似乎工作。

谁能为我提供什么可能是错的任何见解或我怎么能解决这个问题?

+0

什么是'bAsync'的价值?你是否异步打开连接? –

+0

不可以。它被设置为false。 – WindsorRick

+0

你尝试使用[WINHTTP工具(https://msdn.microsoft.com/en-us/library/windows/desktop/aa384084(V = vs.85)的.aspx),如'WinHttpTraceCfg'以找到问题可能发生的地方? –

回答

1

你能检查WinHttpSettings注册表项设置?

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \互联网 设置\连接\ WinHttpSettings

默认值(无代理)是 enter image description here

我想,Fiddler修改这个配置为了代理。

如果Fiddler未运行=>无代理=>连接错误。

WinHttpRequest,如果setProxy未明确称为=>HTTPREQUEST_PROXYSETTING_DEFAULT =>HTTPREQUEST_PROXYSETTING_PRECONFIG

HTTPREQUEST_PROXYSETTING_PRECONFIG

指示代理设置应该从 注册表来获得。

+0

谢谢!您给出的原因是有道理的,并解释了为什么将代理设置为1(xhr.setProxy 1)导致应用程序正常工作。 – WindsorRick

1

设置代理服务器HTTPREQUEST_PROXYSETTING_DIRECT解决了这个问题。

' Important Note: The setProxy setting of 1 corresponds to HTTPREQUEST_PROXYSETTING_DIRECT 
' (see https://msdn.microsoft.com/en-us/library/windows/desktop/aa384059(v=vs.85).aspx) 
' Without this, the app would only work on the dev machine when Telerik Fiddler was also 
' running. Oddly, the app would run correctly on all other machines. 

Set xhr = getRequestObject() 
xhr.setProxy 1 
xhr.open "POST", sUrl, bAsync 
xhr.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
xhr.setRequestHeader "Content-Length", Len(sBody) 

上面引用的微软文章给出了代理可以设置的常量的三个值。我不明白为什么“直接”设置工作,但它确实。

感谢让德和其他任何看待此事的人。

相关问题