2

Web サービスを作成し、そのメソッドを使用したい場合は、プロシージャでインスタンス化し、メソッドを呼び出し、最後に破棄しますが、「プライベート void」で Web サービスをインスタンス化しても問題ないと思います。 Main_Load(object sender, EventArgs e)" イベント。

問題は、最初の方法でそれを行う場合、メソッドのいずれかが必要になるたびに Web サービスをインスタンス化する必要があることですが、別の方法では、フォームで使用するときに常に Web サービスを接続したままにしておく必要があります。

これらのプラクティスのどれが優れているか、またはそれを行うためのはるかに優れた方法があるかどうかを知りたい

戦略 1

private void btnRead_Click(object sender, EventArgs e)
{
    try
    {
        //Show clock
        this.picResult.Image = new Bitmap(pathWait);

        Application.DoEvents();

        //Connect to webservice
        svc = new ForPocketPC.ServiceForPocketPC();
        svc.Credentials = new System.Net.NetworkCredential(Settings.UserName, Settings.Password);
        svc.AllowAutoRedirect = false;
        svc.UserAgent = Settings.UserAgent;
        svc.PreAuthenticate = true;
        svc.Url = Settings.Url;
        svc.Timeout = System.Threading.Timeout.Infinite;

        svc.CallMethod();
         ...
    }
    catch (Exception ex)
    {
        ShowError(ex);
    }
    finally
    {
        if (svc != null)
            svc.Dispose();
    }
}

戦略 2

private myWebservice svc;

private void Main_Load(object sender, EventArgs e)
{
    //Connect to webservice
    svc = new ForPocketPC.ServiceForPocketPC();
    svc.Credentials = new System.Net.NetworkCredential(Settings.UserName, Settings.Password);
    svc.AllowAutoRedirect = false;
    svc.UserAgent = Settings.UserAgent;
    svc.PreAuthenticate = true;
    svc.Url = Settings.Url;
    svc.Timeout = System.Threading.Timeout.Infinite;
}

private void btnRead_Click(object sender, EventArgs e)
{
    try
    {
        //Show clock
        this.picResult.Image = new Bitmap(pathWait);

        Application.DoEvents();
        svc.CallMethod();
         ...
    }
    catch (Exception ex)
    {
        ShowError(ex);
    }
}

private void Main_Closing(object sender, CancelEventArgs e)
{
    svc.Dispose();
}
4

2 に答える 2

2

これは、Webサービスを呼び出す頻度によって異なります。ほぼ常に呼び出す場合は、方法2を使用することをお勧めします。ただし、それほど頻繁に呼び出されない場合は、方法1を使用し、必要なときにのみインスタンス化することをお勧めします。

于 2008-08-16T15:04:56.603 に答える
0

今、私はモバイルデバイス用のソリューションを作成しましたが、それは不規則な時間に使用されるようになり、10分、1時間、4時間で使用できるようになり、非常に変動します。より良いアプローチが最初の戦略のようです。

昨年、Webサービスを使用するプロジェクトに参加しましたが、実際には、Sub New()プロシージャでWebサービスをインスタンス化して非常にうまく実行しましたが、椅子から目が覚めたと主張するユーザーもいました。彼らが戻ってアプリケーションを続行しようとすると、タイムアウトエラーメッセージが表示され、再度ログインする必要がありました。

おそらくユーザーが非常に長い間席を外していたので、それは大丈夫だったと思いますが、CEOとのアプリケーションのプレゼンテーションで、まったく同じシナリオが発生し、個人的にはその動作が気に入らなかったので、それが質問の理由です。

答えてくれてありがとう。

于 2008-08-16T15:24:19.807 に答える