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); }
プロキシを使用します。 Uri uriProxy = new Uri("http://myproxy.ent:808"); CustomUserProxy customProxy = new CustomUserProxy(uriProxy); customProxy.SetCredentials(new NetworkCredential("Login", "Password")); WebRequest.DefaultWebProxy = customProxy;
彼は、ClickOnce更新プログラムを使用してWCFサービスを呼び出すプロジェクトで働いています。