- PR -

WebDAVをC#で操作する方法について

1
投稿者投稿内容
昆虫
会議室デビュー日: 2003/08/19
投稿数: 2
投稿日時: 2004-09-13 20:36
<サーバ環境>
OS:Windows2003Server
Webサーバ:IIS6.0

インターネット環境でリモートクライアント間のファイル共有を実現しようと、WebDAVサーバを構築してC#で作成したWindowsアプリで操作しようとしています。
ファイルのアップロード・ダウンロードであればWebClientクラスのUploadFileやDownloadFileメソッドを使用して行うことができるのですが、サーバにコレクションを作成しようとするとエラーが発生してしまいます。エラーの内容は以下のとおりです。

(ExceptionクラスのMessageプロパティ)
リモート サーバーがエラーを返しました : (415) Unsupported Media Type
(IISのログ)
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Cookie) sc-status sc-substatus sc-win32-status sc-bytes cs-bytes
2004-09-13 10:43:01 IPアドレス MKCOL /dav/ - 80 ユーザ名 IPアドレス - - 415 0 0 1551 376

私が書いたソースは以下のような感じです。都合上例外処理等は割愛してあります。

string strBody = "<?xml version=\"1.0\"?><g:propertyupdate xmlns:g=\"DAV:\" "
+ "xmlns:ex=\"http://ホスト名/dav/\"><g:set>"
+ "<g:prop><g:displayname>作成したコレクション名</g:displayname></g:prop>"
+ "</g:set></g:propertyupdate>";
HttpWebRequest Request = (System.Net.HttpWebRequest)HttpWebRequest.Create("WebDAVサーバURI");
NetworkCredential nc = new NetworkCredential(); //Basic認証情報を作成
nc.UserName = "ユーザ名";
nc.Password = "パスワード";
Request.Credentials = nc;
WebProxy wp = new WebProxy("IPアドレス:ポート番号"); //プロキシサーバ
Request.Proxy = wp;
Request.Method = "MKCOL";
byte[] bytes = Encoding.UTF8.GetBytes((string)strBody);
Request.ContentLength = bytes.Length;
RequestStream = Request.GetRequestStream();
RequestStream.Write(bytes, 0, bytes.Length);
RequestStream.Close();
Request.ContentType = "text/xml";
Response = (HttpWebResponse)Request.GetResponse(); //ここで例外が発生します
Response.Close();

マイネットワークの「ネットワークプレースの追加」においてWebDAVサーバを追加してサーバにフォルダを新規作成することはできるので、IISにおいて「MKCOL」メソッド自体が使用できないということはないと思います。それともExchangeServer2003などの特別なソフトをインストールする必要があるのでしょうか?

環境構築・プログラムいずれに問題があるか分からない状況ですので、WebDAVに明るい方がいらっしゃいましたらご教授いただければと思います。
昆虫
会議室デビュー日: 2003/08/19
投稿数: 2
投稿日時: 2004-09-14 16:23
自己レスです。

自分のプログラムロジックに誤りがありました。

HttpWebRequest Request;
HttpWebResponse Response;
string strFolderURI = "http://WebDAVサーバ名/新規作成したいコレクション名/";
try {
 NetworkCredential nc = new NetworkCredential();
 nc.UserName = "ユーザ名";
 nc.Password = "パスワード";

 // Create the HttpWebRequest object.
 Request = (System.Net.HttpWebRequest)HttpWebRequest.Create(strFolderURI);

 // Add the network credentials to the request.
 Request.Credentials = nc;

 // Specify the MKCOL method.
 Request.Method = "MKCOL";

 // Send the MKCOL method request, get the
 // method response from the server.
 Response = (System.Net.HttpWebResponse)Request.GetResponse();

 // Close the HttpWebResponse object.
 Response.Close();

} catch(Exception ex) {
 //例外処理
}

とすることでWebDAVサーバにコレクションが作成できることを確認しました。

[ メッセージ編集済み 編集者: 昆虫 編集日時 2004-09-14 16:24 ]
1

スキルアップ/キャリアアップ(JOB@IT)