0

プロジェクトでCassiniDevServerを使用しています。CassiniDevServer クラスのオブジェクトを作成し、適切な引数を渡してその start() メソッドを呼び出しました。

サーバーは Web ページをホストし、ブラウザーで正しくレンダリングします。しかし、しばらくしてから更新すると、ブラウザは

ローカルホストに接続できません:ポート番号

しばらくするとサーバーが停止するようです。なぜそうなのですか?どうすればこれを回避できますか? ガベージコレクションされていますか?

次のメソッドを持つクラス MyCassiniDevUtil があります。

public CassiniDevServer launchWebsite(string path, string navigate, int _portNo)
  {
    CassiniDevServer _server = new CassiniDevServer();  ///server

    cassiniServerList.Add(_server);
    _server.StartServer(path, _portNo, "/", "localhost");
    portNo = _portNo;

    System.Diagnostics.Process.Start("http://localhost:" + portNo + 
          "/" + navigate);
    return _server;           
  }

呼び出しコードでオブジェクトを作成し、MycassiniDevUtilこのメソッドを呼び出します。このメソッドは、現在作成されているサーバー インスタンスへの参照を返します。この参照を呼び出し元のコード クラスに割り当てます。

したがって、実際には両方のクラスへの参照がありますが、それでもガベージコレクションが行われていると感じています。または、そうでない場合は、ブラウザを更新して数分後に接続できないと表示される理由がわかりません...

4

2 に答える 2

1

CassiniDev で CassiniDevServer クラスのオブジェクトを作成する代わりに; パッケージに、以下のように Server クラスのオブジェクトを作成しました (timeout プロパティを指定できるため)

        System.Net.IPAddress ip = System.Net.IPAddress.Parse("127.0.0.1");
        Server _server1 = new Server(_portNo, "/", path, ip, "localhost", 1800000);
        _server1.Start();            

_portNo は任意のポート番号です - おそらく未使用のポート番号の範囲内です。次のように、動的かつランダムに生成しました。

        Random rn = new Random();
        int _portNo = rn.Next(1500, 4000);

path は、Web サイト フォルダー (web.config、AppCode、AppData を含むフォルダー) への物理パスです。

1800000 は 30 分に相当するミリ秒です。

/ は、アドレスhttp://localhost :<_portNo>/でホストされている Web サイトを取得するように指定されています。

しかし、誰でも CassiniDevServer と CassiniDev パッケージの Server クラスの違いを明確にすることができます。

于 2012-04-28T16:23:54.980 に答える
0

CassiniDevServer オブジェクトの TimeOut オプションを確認する必要があります。

これは、サーバーがシャットダウンする前にアイドル状態になるミリ秒単位の時間です。これを設定している場所がわからないので、サーバー自体がオフになっている可能性があります。

現在、それへの参照を維持している限り、ガベージコレクションは行われません。しかし、それは上記の理由でニシンです。

于 2012-04-25T23:35:02.497 に答える