Webサービス 基になる接続が閉じられました対応

Webサービスに接続するクライアントを作成し別マシンから、Webサービスを公開しているサーバーに対してアクセスした際に、「基になる接続が閉じられました」というメッセージが出てしまい接続に失敗する現象が発生。

app.configにURLが記述されておりhttp://localhost/xxx/webservice.asmxとなっていたのでそのlocalhostをサーバーのIPアドレスに変更してTry。。。。でもダメ。

色々調べたら、なんかProxyがとかURLをapp.configから取得してとか変なことやってる人がいたが、今回の件は、Web Referencesの設定がstaticになっていたことが原因。

WebReferencesをダイナミックに変更してapp.configのlocalhostをサーバーのIPアドレスにしたところOK!グッジョブ!

ここはまりどころかも。

| | コメント (0) | トラックバック (0)

ASP.NETのチューニング

ASP.NETアプリケーションを作成し負荷テストツールを使ってみたところ、100ユーザーでStateServerにてデッドロックのエラーが出てしまったまずは、デッドロックの調査を行う必要があるがどうやら、デッドロックはリサイクルの際に発生している模様なので、まずリサイクリングを起こさないように設定をいじってみることに。

IIS6のアプリケーションプールのプロパティにて、「リサイクル」タブにて、ワーカープロセスをリサイクルのチェック(分ごと)をはずしその代わり、最大仮想メモリの設定にチェックを入れた。

それでもやはり、エラーは起きてしまった。

タスクマネージャや、プロファイラで見てもCPU、メモリともにスカスカなのでスレッドが詰まっているのではないかと考え.NETのMachine.configを編集することに。

下記サイトに乗っている情報を元に、

http://www.microsoft.com/japan/msdn/enterprise/pag/scalenetchapt17.asp#scalenetchapt17_topic3

構成設定規定値 (.NET 1.1)推奨値
maxconnection 2 12 * CPU数
maxIoThreads 20 100
maxWorkerThreads 20 100
minFreeThreads 8 88 * CPU数
minLocalRequestFreeThreads 4 76 * #CPUs

にそれぞれ設定をした。

CPUの使用率も上がりエラーも起きなくなったが、150ユーザーでの使用を試したところ

やはり同じような結果になった。アプリの部分でのボトルネックも調査せねば。(普通先にアプリを調査するんだと思うけどね。CPUつかってなかったのでまずマシン一杯一杯状態になるまでやってみたかったんだよねぇ。。。)

環境は、

Windows Server2003

IIS6

.NET Framework1.1 SP1

SQLServer 2000

続く・・・かも

| | コメント (0) | トラックバック (0)

Ajax.NETを使ってみる

Ajax.NET というライブラリがあるので早速使ってみる。


環境は、こんな感じ

OS WindowsXP Pro SP2

開発環境 VisualStudio.NET2003

開発言語 C#

.NET Framework1.1


dllへの参照をWebアプリプロジェクトに設定して、Web.configを編集すれば設定は終了

(詳しくは、上記リンクのサイトから、ダウンロードして短いドキュメントを読めばOK)


Pageクラス(名前空間 Sample クラス名 SamplePage)


 1.

  private void Page_Load(object sender, System.EventArgs e)
  {
      Ajax.Utility.RegisterTypeForAjax(typeof(SamplePage));
  } 


 2.
  [Ajax.AjaxMethod]
  public string connectString(string value1,string value2)
  {
      return value1+value2;
  }

1.ページクラスのPage_Loadメソッドにて、Ajax.Utility.RegisterTypeForAjaxメソッドを用いて

  SamplePageクラスをAjax呼び出しの対象に指定

2.SamplePageクラスに[Ajax.AjaxMethod]属性を追加したメソッドを作成

  (このサンプルでは、渡された文字列をコネクトして返すだけ)

あとは、aspxにJavaScriptを記述していく感じ。

(これもサンプルを見れば大体わかると思う)


これじゃ全然説明になってないけど、、DataSetや、独自に実装したクラスも扱えるというのはうれしい。

| | コメント (0) | トラックバック (2)

StateServiceにやられる

今日の話は、.NETのWebアプリケーションのセッション管理、アプリケーションスコープ変数のお話。

アプリケーションスコープに保持しておいたデータがなぜか消えるという自体が発生して

調査したところ、どうやらweb.configのsessionStateが問題らしい。

mode="StateServer" モードがInProcになっていると、プロセスリサイジングのタイミングで、SessionオブジェクトやApplicationスコープのオブジェクトがGCされてしまうらしい。(オソロシヤ)そこで、modeをStateServerに変更。

アプリを起動したら、なぜかエラーに!!

どうやらstateServerモードにする場合、ASP.NET StateServiceというサービスを起動しないといけないということらしい。早速、サービスを起動しアプリを起動したら、動きました。ちなみに設定は、こんな感じ↓

stateConnectionString="tcpip=localhost:42424"

それにしてもInProcといえどもApplicationスコープのインスタンス消したりしないでほしいのぅ。。

#その後再現まちなので、本件が原因でのインスタンス消滅かどうかはまだなぞなんですが。。

参考:http://msdn2.microsoft.com/ja-jp/library/ms178586.aspx

| | コメント (0) | トラックバック (0)