C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: HttpWebRequest のエラーについて


(過去ログ 30 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■14430 / inTopicNo.1)  HttpWebRequest のエラーについて
  
□投稿者/ yama (1回)-(2008/02/18(Mon) 15:30:49)

分類:[.NET 全般] 

はじめまして、エラー原因が全くわからずアドバイス頂ければと思い投稿させていただきます。


C#(クライアントのコンソールアプリケーション)から別サーバのXMLウェブサービスに接続
しようとすると”リモート サーバーがエラーを返しました: (403) 使用不可能”という
エラーが発生してしまいます。クライアントのWebアプリケーションならば接続に成功するのですが
原因がまったくわかりません。教えてください。

-----以下 プログラム-----
NetworkCredential networkCredential = new NetworkCredential("USER", "PassWord", "Domain");

HttpWebRequest Req = (HttpWebRequest)WebRequest.Create("http://別サーバ/Test.asmx/GetAAAAA");

Req.Credentials = networkCredential;

byte[] Data = Encoding.UTF8.GetBytes("Param=1234");

Req.Method = "POST";
Req.Accept = "text/javascript, text/html, application/xml, text/xml, */*";
Req.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
Req.ContentLength = Data.Length;

Stream sw = Req.GetRequestStream();

sw.Write(Data , 0, Data.Length);
sw.Close();


WebResponse Res = Req.GetResponse(); ←この部分でエラーが発生します。

Encoding enc = Encoding.GetEncoding("UTF-8");

Stream st = Res.GetResponseStream();
StreamReader sr = new StreamReader(st, enc);

sbXml.Append(sr.ReadToEnd());

sr.Close();
sr.Dispose();

st.Close();
st.Dispose();



引用返信 編集キー/
■14445 / inTopicNo.2)  Re[1]: HttpWebRequest のエラーについて
□投稿者/ 七曜 (74回)-(2008/02/19(Tue) 01:29:36)
No14430 (yama さん) に返信
> NetworkCredential networkCredential = new NetworkCredential("USER", "PassWord", "Domain");
>
> HttpWebRequest Req = (HttpWebRequest)WebRequest.Create("http://別サーバ/Test.asmx/GetAAAAA");
>
> Req.Credentials = networkCredential;

確か、HttpWebRequest.UseDefaultCredentialsは、既定ではtrueだったはずなので
Req.CredentialsにnetworkCredentialを設定しても、既定の資格情報が使用されているような。
Web Service側のアクセスログで資格情報を確認してみて、networkCredentialで設定されている資格情報ではなく
(コンソールアプリということなので)クライアントにログインしている資格情報でアクセスしているようであれば

> Req.Credentials = networkCredential;

の前に

Req.UseDefaultCredentials = false;

を設定すれば良いかもしれません。
引用返信 編集キー/
■14462 / inTopicNo.3)  Re[2]: HttpWebRequest のエラーについて
□投稿者/ yama (3回)-(2008/02/19(Tue) 11:46:46)
七曜さんご回答ありがとうございます。

>Req.UseDefaultCredentials = false;

を追加したのですが同一なエラーが発生してしました。

もう少し調査を続けたいと思います。
引用返信 編集キー/
■14465 / inTopicNo.4)  Re[3]: HttpWebRequest のエラーについて
□投稿者/ いしだ (91回)-(2008/02/19(Tue) 13:25:50)
まったく的外れの可能性大ですが、以下のようにするとどうでしょう?
Req.Credentials = System.Net.CredentialCache.DefaultCredentials;
引用返信 編集キー/
■14466 / inTopicNo.5)  Re[4]: HttpWebRequest のエラーについて
□投稿者/ yama (5回)-(2008/02/19(Tue) 13:31:04)
No14465 (いしだ さん) に返信
> まったく的外れの可能性大ですが、以下のようにするとどうでしょう?

いしだ さん ご回答ありがとうございます。

> Req.Credentials = System.Net.CredentialCache.DefaultCredentials;

を追加したのですが同一なエラーが発生してしました。


WebアプリケーションとコンソールアプリケーションではHTTPヘッダ情報に
差異がありHOSTヘッダなどがコンソールアプリケーションの場合は付与されて
いないのですが、これが原因なのでしょうか?


引用返信 編集キー/
■14500 / inTopicNo.6)  Re[5]: HttpWebRequest のエラーについて
□投稿者/ 七曜 (75回)-(2008/02/20(Wed) 11:19:52)
No14466 (yama さん) に返信
検証環境:Windows Vista (Enterprise)、IIS7.0、VS2008
アプリケーション設定:Windows認証=有効、その他の認証=無効
物理ファイルへのアクセス権:NetworkCredentialで設定しているユーザーにアクセス権あり

[ConsoleApp側Source]
            NetworkCredential credential = new NetworkCredential("username", "password", "domain");
            CredentialCache credentialCache = new CredentialCache();
            credentialCache.Add(new Uri("http://localhost"), "NTLM", credential);
            //String Url = "http://localhost:51450/WebSite1/Service.asmx/HelloWorld";
            //String Url = "http://localhost:51450/WebSite1/Service.asmx/Method1";
            String Url = "http://localhost/WebSite1/Service.asmx/Method1";
            byte[] postdata = Encoding.UTF8.GetBytes("param=aaaa");
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
            request.Method = "POST";
            request.Accept = "text/javascript, text/html, application/xml, text/xml, */*";
            request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
            request.ContentLength = postdata.Length;
            request.UseDefaultCredentials = false;
            request.Credentials = credential;
            //request.Credentials = credentialCache.GetCredential(new Uri("http://localhost"), "NTLM");

            using (Stream writer = request.GetRequestStream())
            {
                writer.Write(postdata, 0, postdata.Length);
            }

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            String responseValue = String.Empty;
            using (Stream stream = response.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    responseValue = reader.ReadToEnd();
                }
            }
            Console.WriteLine(responseValue);
            Console.Read();

[Web Service側]
    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }

    [WebMethod]
    public string Method1(string param)
    {
        return param;
    }

[実行結果]
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">aaaa</string>

IISのWindows認証で通らないユーザーを設定した場合には、HTTP Statusは401でした。
HTTP Status 403もアクセス権関連だったかと思うので、アクセス権周りを確認すれば良い気がしますけど・・・。

ちなみに、ConsoleAppをデバッグ実行し、Exceptionの発生した際のInnerExceptionやらStackTraceやらを見ると
追加情報を得られるかと思います。

引用返信 編集キー/
■14501 / inTopicNo.7)  Re[6]: HttpWebRequest のエラーについて
□投稿者/ 七曜 (76回)-(2008/02/20(Wed) 11:22:24)
後ですね、.NET Web Service to .NET Console Appであれば、WSDL.exeでProxyClassを生成して
ConsoleApp側は、ProxyClassを使用するのではダメなのですかね?
(何か制約があったかは、確認していませんけど・・・。)

引用返信 編集キー/
■14504 / inTopicNo.8)  Re[7]: HttpWebRequest のエラーについて
□投稿者/ yama (7回)-(2008/02/20(Wed) 11:51:19)
ご回答ありがとうございます。

クライアントのOSをXPから2003サーバにした場合に
問題なく動作をしたので、Windowファイヤーフォールなど
の問題のようです。


七曜さん・いしださん、たくさんのご回答ありがとうございました。
解決済み
引用返信 編集キー/
■14511 / inTopicNo.9)  Re[8]: HttpWebRequest のエラーについて
□投稿者/ はつね (462回)-(2008/02/20(Wed) 14:45:13)
はつね さんの Web サイト
No14504 (yama さん) に返信
> クライアントのOSをXPから2003サーバにした場合に
> 問題なく動作をしたので、Windowファイヤーフォールなど
> の問題のようです。

XPのWindowsファイヤーウォールの設定を一時的にオフにして問題なく動作するのを確認しておいた方がいいですよ。
そうじゃないと推測で解決したと思っていて後で足元すくわれるときって多いですから。


解決済み
引用返信 編集キー/
■14514 / inTopicNo.10)  Re[9]: HttpWebRequest のエラーについて
□投稿者/ yama (9回)-(2008/02/20(Wed) 15:22:48)
はい。おっしゃる通りでWindowsファイヤーウォールの設定をにオフしても起動しません。
ですが、Web参照の追加でもWebサービスは見えているのですが「HTTP ステータス 403: Forbidden で要求が失敗しました。」
というエラーが発生していましたので、環境的に何か不備があると思っています。
引用返信 編集キー/
■14596 / inTopicNo.11)  Re[10]: HttpWebRequest のエラーについて
□投稿者/ yama (10回)-(2008/02/22(Fri) 16:49:44)
解決済みにチェックをしていなかったようなので、チェックをさせていただきます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -