- - PR -
ファイル送信時のエラー情報を知りたい(My.Computer.Network.UploadFile)
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-09-26 20:17
平素よりお世話になっております。
どこから手をつけていいのか、はたまたこんな事が実現できるのか 全く分からないので、どなたかご教授頂けませんでしょうか。 ある端末(端末Aとします)から違う端末(端末Bとします)へ ファイルを送信したいと思っています。 (ある事情があり、ネットワークドライブの作成は出来ません) そこで、[My.Computer.Network.UploadFile]命令を見つけ、 以下のような構成/PGを考えました。 ■Windowsアプリケーション---------------------------------------------------- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try '作成したWebアプリケーションへローカルファイル「C:\temp\なんちゃら.txt」を送信する My.Computer.Network.UploadFile("C:\temp\なんちゃら.txt", _ "http://(Webアプリケーション仮想ディレクトリ)/Default.aspx") Catch ex As Exception '##################################### 'なんらかのエラーがあったらキャッチ '##################################### End Try End Sub ----------------------------------------------------------------------------- ■Webアプリケーション(Default.aspx)------------------------------------------ Partial Class _Default Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '送信ファイルを取得する Dim upFiles As HttpFileCollection = Request.Files '送信ファイルが存在しなかったらエラーを発生させる If upFiles.Count <= 0 Then Throw New Exception("送信ファイルがありません。") For i As Integer = 0 To upFiles.Count - 1 Try '・・・ファイルの処理・・・ Catch ex As Exception 'エラーを返す Throw ex Next i End Sub ----------------------------------------------------------------------------- 正常処理の場合はうまく行きました。ところが!。 Webアプリケーション側で発生させたエラーメッセージを Windowsアプリケーション側でキャッチ(#で囲んでいる部分)すると、 「リモート サーバーがエラーを返しました: (500) 内部サーバー エラーです。」 しか取る事が出来ないのです。 Webアプリ/web.configで、<customErrors mode="Off" />を設定して WinアプリでキャッチしたエラーのInnerExceptionを見てみましたが、 やっぱり空で、メッセージを取得する事が出来ませんでした…。 なんとかして、Webアプリで発生させたエラーの メッセージ内容をWindowsアプリに渡す事は出来ないのでしょうか。 もしくは、別の手段で実現する方法はないものでしょうか。 以上、長文になってしまいましたが、何でもいいので情報をよろしくお願い致します。 |
|
投稿日時: 2007-09-26 22:04
Windowsアプリケーション側では
WebClient.UploadFile メソッド http://msdn2.microsoft.com/ja-jp/library/system.net.webclient.uploadfile.aspx または HttpWebRequest.GetResponse メソッド http://msdn2.microsoft.com/ja-jp/library/system.net.httpwebrequest.getresponse(VS.80).aspx でファイルをアップロードして、 Webアプリケーション側ではResponse.BinaryWriteを使ってエラーや正常を示す何らかのデータを返すのはどうでしょうか。 HttpResponse.BinaryWrite メソッド http://msdn2.microsoft.com/ja-jp/library/system.web.httpresponse.binarywrite(VS.80).aspx 詳細は各MSDNライブラリのページや関連ページをご参照ください。 |
|
投稿日時: 2007-09-27 11:16
平素よりお世話になっております。
やったーー、できました。しかも理想の形でした!。 実は、エラーを発生させるのって気持ち悪いし、 <customErrors mode="Off" />だとセキュリティ心配だし、 本当はとってもイヤだったんです。 要は、HTMLの中身で返せばいい、ということだったんですね。 念の為、ソース掲載しておきます。 ■Windowsアプリケーション---------------------------------------------------- Imports System.Net Imports System.Text.Encoding Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try Dim strFILE As String = "(送信したいクライアントのファイル)" Dim strURL As String = "http://(Webアプリケーション仮想ディレクトリ)/Default.aspx" Using webClnt As WebClient = New WebClient() With webClnt 'ファイル送信 Dim retByte As Byte() = .UploadFile(strURL, strFILE) '戻り値を取得 Dim ret As String = UTF8.GetString(retByte) End With End Using Catch ex As Exception Dim aaaa As String = "" End Try End Sub ■Windowsアプリケーション---------------------------------------------------- Imports System.IO Imports System.Text.Encoding Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If IsPostBack = False Then 'POSTされたファイルを取得する Dim uploadedFiles As HttpFileCollection = Request.Files For i As Integer = 0 To uploadedFiles.Count - 1 'ファイルの書き出しを行う Dim userPostedFile As HttpPostedFile = uploadedFiles(i) userPostedFile.SaveAs("(サーバ上のファイル保管先)") '全ての出力内容をいったん削除 Response.Clear() '正常終了を出力する Dim bytUTF8 As Byte() = UTF8.GetBytes("0|正常終了しました。") Response.BinaryWrite(bytUTF8) Response.End() Next i End If End Sub 以上、本当にありがとうございました。感謝感激です!。 今後ともよろしくお願い致します。 |
|
投稿日時: 2007-09-27 11:19
(し、しまった…、最後の最後に間違えた)
2個目の「■Windowsアプリケーション-----」は 「■Webアプリケーション」の間違いです;;。 |
1