1

私のWebサービスがカスタムオブジェクト(4つの文字列、3つのint、およびブール値のみを含む)を返す場合、数秒(4〜8秒)かかります。同じサーバーが同じ情報を文字列で送信すると、ほぼ瞬時に送信されます。

それが重要な場合、カスタムオブジェクトクラスは同じWebサービスで定義されます。

私はそれがそれほど大きな違いを生むとは思いませんでしたか、それともここで基本的な何かを見逃しましたか?

編集:いくつかのコード、読みやすくするためにいくつかの変数を削除しました。

Webサービスで定義されたカスタムクラス:

public class AddressSearchResult
{
    public AddressSearchResult()
    {
        Address = String.Empty;
        Country = String.Empty;
    }

    public AddressSearchResult(string address, string country)
    {
        Address = address;
        Country = country;
    }

    public string Address { get; set; }
    public string Country { get; set; }
}

Webサービス上の2つのWebMethodの違いは、returnステートメントだけです。

objを返すWebMethod1

return new AddressSearchResult((string)address["address"], (string)address["country"]);

文字列のみを返すWebMethod2(ここで同じことをしていることを示すためだけに)

return new AddressSearchResult((string)address["address"], (string)address["country"]).Address;

受信側、コンソールアプリ:

AddressSearchResult result = adrSerWS.method1("example", "yehaa"); //THIS IS SLOW
string result2 = adrSerWS.method2("example", "yehaa"); //THIS IS FAST
4

1 に答える 1

1

問題は、Webサービスへの最初の呼び出しが後続の呼び出しよりも長くかかることである可能性があります。コンソールアプリで行うサービスメソッド呼び出しの順序を切り替えてみて、method1それでも最も遅いかどうかを確認してください。

最初の呼び出しが遅くなるのはなぜですか?いくつかのアイデア:1)コンソールアプリでは、最初に行われたメソッド呼び出しにより、Webサービスプロキシで初期化がトリガーされる場合があります。これは、独自のコードまたは.NETの何かである可能性があります。2)IISがしばらくアイドル状態だった後、Webサービスにアクセスしている可能性があるため、新しいワーカープロセスを生成する必要があります。3)デバッガーが接続されたコンソールアプリを実行している場合は、パフォーマンスが最悪の場合に誇張される可能性があることに注意してください。デバッガなしで実行してみてください。

于 2012-12-05T19:28:08.317 に答える