DOBON.NET DOBON.NETプログラミング掲示板過去ログ

GetResponseでのaspxページ取得失敗

環境/言語:[WindowsXP・.NET Framework 1.1]
分類:[.NET]

お世話になります。

http://dobon.net/vb/dotnet/internet/webrequest.html
を参考に、WebServerが生きているか(=Webページが取得できるか)
を監視するアプリケーションを作成しているのですが、
拡張子aspxで記述された特定のページを取得する際に、

Dim webres As System.Net.HttpWebResponse = _
CType(webreq.GetResponse(), System.Net.HttpWebResponse)

の部分でエラーとなります。
(System.Net.WebRequest.Create は正常終了しています)

Try 〜 Catch でのエラー処理を通らず、しかし正常には処理が完了していない
ような動作をしましたので、デバッガでコードの追跡を行ったのですが、
該当の地点で
「現在の場所のソースコードを表示できません」
となって、エラー内容などの確認も出来ない次第です。

対象のページを通常のブラウザで表示させる分には、問題なく表示されます。
(対象のページは、監視専用ページでURLを公開することが出来ませんが、
内容としてはデータベースサーバに接続し、接続の可否を特定の文字列で
出力するだけのページとなっています。)


情報が不足しているかもしれませんが、
この状況につきまして、必要な情報の確認方法や、
解決に至る方法についてなどの情報をお持ちの方は
いらっしゃいますでしょうか?
情報の追加です。

監視対象でない、aspx記述のページ(MS)を表示させたところ、問題なく表示されました。(なぜ最初に確認しなかったのか、自分でも不思議ですが)

以上の結果から、aspxだから問題なのではないのは判明しましたが、
現象が解決したわけでもありません。

アプリで対策できないレベルで、監視用ページに根本原因があるとしても、
修正要素の指摘などの必要があります。

引き続き、回避方法や、考えられる原因など、ご存知の方がいらっしゃいましたら
お願いします。
お世話になります。

■No15525に返信(ZAPさんの記事)
> Dim webres As System.Net.HttpWebResponse = _
> CType(webreq.GetResponse(), System.Net.HttpWebResponse)
>
> の部分でエラーとなります。
> (System.Net.WebRequest.Create は正常終了しています)
エラーって具体的には何でしょう。

> Try 〜 Catch でのエラー処理を通らず、しかし正常には処理が完了していない
> ような動作をしましたので、デバッガでコードの追跡を行ったのですが、
> 該当の地点で
> 「現在の場所のソースコードを表示できません」
> となって、エラー内容などの確認も出来ない次第です。
問題となっている箇所のソースを見れば、
何か情報が掴めるかもしれません。
返信ありがとうございます。

> エラーって具体的には何でしょう。
エラーという表現は適切でなかったかもしれません。
URLのリストに対し、ループで監視しているのですが、
該当のURLを取得に行った時に限り、処理が途中で終了し、
次の項目に進んでしまいます。
(ループの各回の最後に結果を画面に表示しているのですが、
その結果が表示されずに次の項目を処理し、その後の項目は
結果の画面表示も行われます)

具体的にエラーが表示されて処理が停止したりするわけではありません。


> 問題となっている箇所のソースを見れば、
> 何か情報が掴めるかもしれません。
ほぼサンプルのコピーなのですが、
処理関数の開始から、問題の場所までは以下のように記述しています。
(インデント用に半角空白は全角空白に置換してあります)
--ここから--
 'WebRequestの作成
 Dim webreq As System.Net.HttpWebRequest
 Dim webres As System.Net.HttpWebResponse

 System.Net.ServicePointManager.CertificatePolicy = New MyCertificateValidation

 Try
  webreq = CType(System.Net.WebRequest.Create(targetAddr), System.Net.HttpWebRequest)

  '認証の設定
  If Not IsNothing(tmpUrlList(gLc).Credential) AndAlso tmpUrlList(gLc).Credential.Length <> 0 Then
   Dim tmpCredential(2) As String
   Dim tmpPos As Integer

   tmpPos = tmpUrlList(gLc).Credential.IndexOf("/")
   If tmpPos > 0 Then
    tmpCredential = tmpUrlList(gLc).Credential.Split("/")
   Else
    tmpCredential(0) = tmpUrlList(gLc).Credential
   End If

   webreq.Credentials = New System.Net.NetworkCredential(tmpCredential(0), tmpCredential(1))
  End If

  'サーバーからの応答を受信するためのWebResponseを取得
  webres = CType(webreq.GetResponse(), System.Net.HttpWebResponse)
--ここまで--
関数の呼び出しの際、targetAddrに、監視対象のURLを受け取っています。
今回の動作では、認証の設定の内部は通過していません。

aspxからの受信内容によって、GetResponseまでの間に、なにか設定を行う必要があるのでしょうか。
アプリケーション独自での、監視方法の設定を変更してみたところ、
正常に動いたり動かなかったりしたため、ログをさまざまな場所で取得
してみたところ、getResponse()以外の場所で正しく動作していない部分があり、
動作結果が画面に表示されないのは、そちらでの動作結果パターンに対しての
結果表示ロジックが漏れていたことが原因でした。


デバッガで追跡した際に、getResponse()でステップ進行しなかった原因はわかりませんが、getResponse()の動作の問題があったわけではありませんでした。

大変申し訳ありませんでした。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板