2013-08-19 57 views
1

我已經創建了一個使用xml rpc進行通信的C sharp Wpf ClickOnce應用程序。很多我的用戶以不同的方式獲得代理設置。有些使用pac文件,其他來自IE或dhcp等。我希望自動完成在任何類型的環境中獲取代理詳細信息的整個過程。我已經嘗試了很多不同的代碼片段,但是想要聽到這樣的事情是否已經存在。Clickonce自動檢測代理

我看到Xml Rpc文檔有一個setProxy方法,但我不知道如何指定用戶名或passsword(如果使用的話)。整個過程對我來說仍然有點混亂。

我也嘗試了許多不同的代碼片段,包括WebProxy類和使用的DefaultCredentials,DefaultProxy,GetSystemWebProxy等

目前我打算使用WinHTTP的拿到代理設置嘗試dllimport的。我不確定是否可以在Clickonce部署中執行此操作。 dllimport與p/invoke相同嗎?

正如你所看到的,我將不勝感激關於如何獲得任何類型的代理設置的建議。

感謝任何反饋。

回答

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 
    } 
} 
0

ClickOnce安裝/更新並不真的支持代理驗證。它將使用IE中的信息,有時還會使用machine.config文件。有關此的所有已知信息的權威線程是here

從安裝應用程序的角度來看,我沒有使用代理身份驗證的問題。當使用我們的稱爲後端WCF服務的應用程序時,我們讓用戶提供他的代理認證信息,並且在進行服務調用時我們以編程方式應用這些設置。這與ClickOnce無關。