为什么我在WinForms应用程序而不是控制台应用程序中需要(407)代理身份验证?

时间:2014-01-17 10:16:19

标签: c# winforms system.net proxy-authentication http-status-code-407

我的软件通过客户端站点的代理服务器进行通信时遇到问题。它只是获得(407)代理验证所需的错误。它是一个.NET Framework 3.5 C#WinForms应用程序,它使用旧式asmx Web引用进行通信(而不是WCF)。

为了诊断问题,我创建了一个简单的C#控制台应用程序:

static void Main(string[] args)
{
    try
    {
        System.Net.WebClient client = new System.Net.WebClient();
        client.DownloadFile(@"https://www.myserver.co.uk/test.xml", @"C:\temp\test.xml");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

这给出了错误(407)代理验证要求。所以我把它添加到app config:

<system.net>
  <defaultProxy useDefaultCredentials="true" />
</system.net>

它有效。大!但是,在一个类似的简单测试WinForms应用程序中,我将相同的代码放在按钮单击后面,无论是否有额外的配置,我仍然会得到407错误。

控制台应用程序和后者似乎没有发送默认凭据的WinForms应用程序之间的区别是什么?我还能做些什么来诊断这个?

我尝试过的其他事情:

  • 使用CredentialCache.DefaultCredentials和CredentialCache.DefaultNetworkCredentials在代码中设置凭据。

  • 创建新的WebProxy并在代码中设置默认凭据。

  • 将配置更改为指向不存在的Web代理。这给出了一个不同的错误,表明WinForms应用程序至少读取了配置。

我没有尝试在代码中使用用户名和密码创建新的NetworkCredential,部分原因是因为这对于生产应用程序来说实际上不是一个可行的解决方案,但主要是因为我不知道密码!我不得不对LogMeIn进行所有诊断,因为客户端站点位于不同的国家/地区,我正在与一个不太有帮助的IT部门打交道。

感谢您的帮助。

0 个答案:

没有答案