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サービスを呼び出すプロジェクトで働いています。



All Articles