我创建了一个C sharp Wpf ClickOnce应用程序,它使用xml rpc进行通信。我的很多用户以不同的方式获得代理设置。有些人使用pac文件,其他来自IE或dhcp等。我想自动完成在任何环境中获取代理详细信息的整个过程。我尝试了很多不同的代码片段,但想知道这样的事情是否已经存在。
我看到Xml Rpc文档有一个setProxy方法,但我不知道如果使用了一个用户名或密码,如何指定用户名或密码。整个过程对我来说仍然有点混乱。
我还尝试过许多不同的代码,包括WebProxy类,使用DefaultCredentials,DefaultProxy,GetSystemWebProxy等。
目前我将使用winhttp尝试使用dllimport来获取代理设置。我不确定是否可以在Clickonce部署中执行此操作。 dllimport与p / invoke相同吗?
正如您所看到的,我希望获得有关如何获取任何类型的代理设置的一些建议。
感谢任何反馈。
答案 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
}
}