8

クライアントがプロキシ経由で認証できないという問題は、次の手順で修正できます。

    var proxy = WebRequest.GetSystemWebProxy();
    proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
    service.Proxy = proxy;

これは Windows XP では問題なく動作しますが、Windows 7 では 407 (proxy not authenticated 例外) が発生します。違いが何であるか、そしてさらに重要なことに、これを両方のOSで動作させるために何をする必要があるかを知っている人はいますか?

アップデート

ユーザーに次のことを確認してもらいます。

  1. レジストリ エディターで、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon に移動して、CachedLogonsCount の値を教えてください。へ
  2. [スタート] ボックスに「グループ ポリシー」と入力すると、[グループ ポリシーの編集] オプションが表示されるので、それをクリックします。次に、[コンピューターの構成\管理用テンプレート\システム\ユーザー プロファイル\移動プロファイルのキャッシュされたコピーを削除] に移動し、構成されているかどうかを教えてください。構成されている場合は、何に設定されていますか?

報奨金の更新

というわけで、賞金を追加しました。ここから解決策を得ることができます。または、Windows 7 でプロキシを通過するための代替手段にすぎません...

別のアップデート

これが役立つかどうかはわかりませんが、次のことも行っています。

service.PreAuthenticate = true;
service.Url = "myurl";
service.Credentials = new NetworkCredential(txt_UserName.Text, txt_Password.Text);

私の一時的な解決策

これは実際には解決策ではありませんが、今のところ機能します。私は app.config を使用し、プロキシが使用されないように ByPassList を使用してプロキシをデフォルトに設定しています。プロキシには現在強力なファイアウォールがないため、これは実行可能です。他のクライアントの場合、上記を機能させる必要があります

4

4 に答える 4

2

このコードは、XP、Win7、および 2008 で動作します

var webProxy = new WebProxy(WebRequest.DefaultWebProxy.GetProxy(new Uri({TheURLoftheService})));
webProxy.Credentials = CredentialCache.DefaultCredentials;
webProxy.UseDefaultCredentials = true;
service.Proxy = webProxy;
于 2012-10-26T01:45:35.590 に答える
2

実際にはWin7で「修正」されたように見えます:)クライアントとサーバーの両方がhttp 1.1を指定していることを確認できますか

ここで、このシナリオでブラウザーが機能する理由について説明しましょう。IE は、WinHTTP ではなく WinINet を内部で使用します。ネットワーク トレースを見ると、IE が HTTP/1.1 を送信していることがわかりますが、プロキシは HTTP/1.0 で応答しています。インターネットのシナリオでは、依然として HTTP/1.0 を使用しているクライアントとサーバーが無数にあるため、IE は依然としてこの動作を受け入れます。

WinHTTP は、接続を維持するために厳密に HTTP/1.1 準拠を必要とし、HTTP キープアライブは HTTP/1.0 プロトコルではサポートされていません。HTTP キープアライブ機能は、RFC 2616 に従って HTTP/1.1 プロトコルに導入されました。キープアライブを期待するサーバーまたはプロキシも、プロトコルを正しく実装する必要があります。Windows 7、Windows 2008 R2 の WinHTTP は、セキュリティ wrto プロトコル コンプライアンスの点で厳格です。理想的な解決策は、サーバー/プロキシを変更して正しいプロトコルを使用し、RFC に準拠することです。

http://blogs.msdn.com/b/httpcontext/archive/2012/02/21/changes-in-winhttp-on-windows-7-and-onwards-wrto-http-1-0.aspx

于 2012-10-31T03:33:24.377 に答える
0

これは機能しますか?

これを使用してプロキシを設定していますが、これまでのところ、すべての Windows プラットフォームでエラーは発生していません。

Uri address = new Uri("http://your-webservice-address");

//Get User current network credential
ICredentials credentials = CredentialCache.DefaultCredentials;
NetworkCredential credential = credentials.GetCredential(address, "Basic");

//Get HttpWebRequest
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;

//Network Credential should be included on the request to avoid network issues when requesting to the web servic
request.Proxy = WebRequest.DefaultWebProxy;
request.Credentials = new NetworkCredential(credential.UserName, credential.Password, credential.Domain);
于 2012-10-31T20:44:23.407 に答える
0

あなたが与えたコードに基づいて言うのは難しいです。IE の設定かプロキシ変数のどちらかだと思います。

http://social.msdn.microsoft.com/Forums/en/netfxnetcom/thread/61b71194-1758-4c7b-89fe-91be7363db13を確認すると役立つ場合があります。

于 2012-10-31T21:27:00.943 に答える