Clickonce Autodetect Proxy

时间:2013-08-19 11:06:00

标签: proxy clickonce xml-rpc xml-rpc.net

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

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

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

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

正如您所看到的,我希望获得有关如何获取任何类型的代理设置的一些建议。

感谢任何反馈。

2 个答案:

答案 0 :(得分:0)

ClickOnce安装/更新并不真正支持代理身份验证。它将使用IE中的信息,有时还使用machine.config文件。包含所有已知信息的最终主题是here

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

答案 1 :(得分: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
  }
}