ClickOnceとプロキシサーバーを使用する

ClickOnceは、アプリケーションを展開するためのMicrosoftのテクノロジーです。 ClickOnceアプリケーションは、新しいバージョンが利用可能になったときにチェックし、更新されたファイルを自動的に置き換えることができます。これは非常に便利です。

インターネットや外部ネットワークリソースへのユーザーアクセスを制御するために、プロキシサーバーが使用されます(認証の有無にかかわらず)。 ClickOnceは、.NET Framework 3.5以降のWindowsでの統合プロキシ認証をサポートしていますが、基本認証や基本認証などの他の認証プロトコルはサポートしていません。

認証を使用しない場合、 defaultProxy要素を使用してプロキシを構成できます。

<defaultProxy enabled="true|false" useDefaultCredentials="true|false" <bypasslist></bypasslist> <proxy></proxy> <module></module> /> 

ただし、認証が必要なプロキシサーバーを使用するようにコンピューターが構成されている場合、資格情報を指定しても、更新しようとすると次のエラーが表示されます。
リモートサーバーがエラーを返しました:(407)プロキシ認証が必要です。

これは、 SystemNetDownloaderクラスを使用してファイルがダウンロードされるたびに、資格情報がデフォルトデータにリセットされるためです。

この問題を次のように解決します。

独自のプロキシクラスを作成します:CustomUserProxy
  public class CustomUserProxy : IWebProxy { private WebProxy _webProxy; public CustomUserProxy(Uri uri) { _webProxy = new WebProxy(uri); } public ICredentials Credentials { get { return _webProxy.Credentials; } set { } } public Uri GetProxy(Uri destination) { return _webProxy.GetProxy(destination); } public bool IsBypassed(Uri host) { return _webProxy.IsBypassed(host); } /// <summary> ///  ,   Credentials /// </summary> /// <param name="credentials">   </param> public void SetCredentials(ICredentials credentials) { _webProxy.Credentials = credentials; } } 


プロキシを使用します。
 Uri uriProxy = new Uri("http://myproxy.ent:808"); CustomUserProxy customProxy = new CustomUserProxy(uriProxy); customProxy.SetCredentials(new NetworkCredential("Login", "Password")); WebRequest.DefaultWebProxy = customProxy; 


彼は、ClickOnce更新プログラムを使用してWCFサービスを呼び出すプロジェクトで働いています。

Source: https://habr.com/ru/post/J279879/


All Articles