2011年06月23日

Webサービスでクライアントから大きなサイズのファイルをアップロード可能にする

   このエントリーをはてなブックマークに追加 Clip to Evernote
Webサービスで、巨大なデータを受け取ろうとした場合、
maxRequestLengthhの設定をしても、エラーなってしまいます。(IIS 7 からの制限?)
このような場合は、
Web.configに maxRequestLengthに加え、以下のような記述をしてあげる必要があります。


ここで指定している数は、バイト数です。
デフォルトでは、30000000 のようです。

  

Posted by gushwell at 22:30Comments(0)TrackBack(0)

2008年10月08日

asmxへ接続できない

   このエントリーをはてなブックマークに追加 Clip to Evernote
Webサービスのテスト環境を作り、いざブラウザからasmxへ接続しようとしたらエラーになってしまいます。調べたら、IISマネージャのWebサービス拡張の画面に ASP.NET v2.0 が存在していません。ASP.NET v1.1はあるのに....
しかたがないので、手動で登録しました。
これでOKだと思って、アクセスするも、今度は、

現在の ID (NT AUTHORITY\NETWORK SERVICE) には 'c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files' への書き込みアクセスが与えられていません。

というエラーになってしまいます。

完全に、セットアップ手順が間違っていたようです。

どこからやり直したらよいかがわからないので、これも手動で設定しました。
「Temporary ASP.NET Files」フォルダを右クリックし、[共有とセキュリティ]のタブで、アクセス権を付与しました。
やっとこれで asmxにアクセスできるようになりました。
疲れた...  
Posted by gushwell at 22:04Comments(0)TrackBack(0)

2007年07月12日

ASP.NETのWebサービスで、System.Diagnostics の Trace

   このエントリーをはてなブックマークに追加 Clip to Evernote
久しぶりに、ASP.NETのWebサービスを作成、でも、System.Diagnostics の Traceが取れない?
この原因がなかなか分からずに、かなり手こずってしまった。

Web.configの変更が必要なんだっけ?
違うと思いつついくつかのオプションを追加してみたが、改善しない。
ためしに、Visual Studio 2005 からASP.NET 開発サーバーを使い、ローカルでデバッグしたら、こっちは問題なくTraceが取れた。

これで、セキュリティの問題かなと、なんとなく見当がついた。

Webサービスの起動アカウント(デフォルトでは、Network Service)のアクセス権を
IISのマネージャから変更することで解決。
書き込み権限が付与されていなかったためです。
  
Posted by gushwell at 21:53Comments(0)TrackBack(0)

2007年07月04日

Webサービスで、独自のクラスを渡すには

   このエントリーをはてなブックマークに追加 Clip to Evernote
Webサービスで、独自のクラスを渡したい場合のやり方。

(1)何も考えずに、クラスを引数にする。
(2)stringにシリアライズして渡す。

(2)の良いところは、クライアント、サーバーともに、引数で渡す型について同じnamespaceにあるクラスとして利用できるということ。
そして、クラスの定義が変更されても、WebMethodのインターフェースを変えなくても良いこと。

さらに、閉じたシステムでは、双方で同じアセンブリを利用できるので、共通化がやりやすい。
メソッドを持ったクラスを受け渡すことも問題なくできる。


なお、(2)の実装は、いくつかやり方があるが、XMLシリアライズなどよりも、BinaryFormatterでシリアライズした後、Base64でエンコーディングして渡すやり方の方がわずかに早かった。  
Posted by gushwell at 20:57Comments(0)TrackBack(0)

2006年08月07日

Webサービス クライアント側のタイムアウト値

   このエントリーをはてなブックマークに追加 Clip to Evernote
Webサービスのクライアント側のタイムアウト値は、WebClientProtocol.Timeout プロパティを設定すれば変更できる。
単位は、ミリ秒なので、3分にしたければ、

MyWebService service = new MyWebService();
service.Timeout = 180000;

となる。Timeout.Infinite に設定すると、タイムアウトせずに待ち続けることになる。
なお、デフォルト値は、100000 ミリ秒だ。

それにしても、.NET Framework の Timeout値の単位って、秒だったり、ミリ秒だったり、分だったりみんなばらばらだなー。
それぞれ事情があるのは分かるのだけれど、TimeSpan型で統一してくれれば良かったのに。。。

service.Timeout = (int)TimeSpan.FromMinutes(3).TotalMilliseconds;

とでも、書こうか???  
Posted by gushwell at 23:06Comments(0)TrackBack(0)