1

我创建了一个使用 xml rpc 进行通信的 C sharp Wpf ClickOnce 应用程序。我的很多用户以不同的方式获得代理设置。有些使用 pac 文件,其他来自 IE 或 dhcp 等。我想在任何类型的环境中自动化获取代理详细信息的整个过程。我尝试了很多不同的代码片段,但想听听这样的东西是否已经存在。

我看到 Xml Rpc 文档有一个 setProxy 方法,但我不确定如何指定用户名或密码(如果使用的话)。这整个过程对我来说仍然有点混乱。

我还尝试了许多不同的代码,包括 WebProxy 类和使用 DefaultCredentials、DefaultProxy、GetSystemWebProxy 等。

目前,我将尝试使用 winhttp 进行 dllimport 以获取代理设置。我不确定是否可以在 Clickonce 部署中执行此操作。dllimport 是否与 p/invoke 相同?

如您所见,我将不胜感激有关如何获取任何类型的代理设置的建议。

感谢任何反馈。

4

2 回答 2

0

这对我有用:

public static IExample ProxyAndCredentials { get; set; }
public static string ProxyUrl { get; set; }

public static void SetupProxyAndCredentials() {

  //Insert your website here where XmlRpc calls should go
  var url = new Uri("http://www.example.com/");   

  try
  {
    ProxyUrl = WebRequest.DefaultWebProxy.GetProxy(url).ToString();
    Log.Debug(url + "    is using proxy      " + ProxyUrl);

    if (ProxyUrl == url.ToString() || ProxyUrl == url + "/"){

    // A proxy is not in use here
    ProxyUrl = "";
    Log.Debug("No proxy is used for " + url);

    }
    else if (!String.IsNullOrEmpty(ProxyUrl)){

    // A proxy is in use
    ProxyAndCredentials.Proxy = new WebProxy(ProxyUrl);
    Log.Debug("A proxy is used for " + url);

    }

    //Set credentials, in my experience it is better to always set these
    ProxyAndCredentials.Credentials = CredentialCache.DefaultNetworkCredentials;
    ProxyAndCredentials.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
  }
  catch (Exception p)
  {
    //Handle Exception
  }
}
于 2013-12-30T16:03:00.423 回答
0

ClickOnce 安装/更新并不真正支持代理身份验证。它会使用 IE 中的信息,有时还会使用 machine.config 文件。包含所有已知信息的权威线程在这里

从安装应用程序的角度来看,我没有遇到代理身份验证问题。在使用调用后端 WCF 服务的应用程序时,我们让用户提供他的代理身份验证信息,并在进行服务调用时以编程方式应用这些设置。这与 ClickOnce 无关。

于 2013-09-08T17:46:44.820 回答