2011-12-15 13 views
2

私はWebサービスメソッドがあります。
ウェブサービスの応答時間が増加しました...どうですか?

[WebMethod] 
public Response Process() 
{ 
    return RunCode(); 
} 

RUNCODEは()を実行するために6秒かかりますが、IIS /ブラウザがXMLを返すように20+秒かかります。

私はRUNCODE()を取ると、スレッドに入れた場合、それは今6秒で返します。

private _response Response; 
[WebMethod] 
public Response Process() 
{ 
    new Thread(RunProcess).Start() 
    while(_response==null) 
    { 
    Thread.Sleep(100); 
    } 
    return _response; 
} 

private void RunProcess() 
{ 
    _response=RunCode(); 
} 

私の質問は、これは、IISを強制的に)(RUNCODEで何が起こって何ができるか...です/ASP.NETは応答を遅らせますか?コードの実行には6秒しかかかりません。リソースが別のスレッドになければ、何らかのリソースが縛られロックされているので、ASP.NETはそれを待ちますか?

編集#1:応答の例が要求されました。 応答の例は、このです。このクラスのオフに基づい

<PostResponse> 
     <isValidPost>false</isValidPost> 
     <ResponseType>Post_Over_Max</ResponseType> 
     <ResponseDetails>System is currently at max leads allowed</ResponseDetails> 
     <LeadIdentifier>0</LeadIdentifier> 
     <VendorAccountAssigned>0</VendorAccountAssigned> 
     <PendingQCReview>false</PendingQCReview> 
     <Price>0</Price> 
     <RedirectURL/> 
</PostResponse> 

public class PostResponse : IPostResponse 
{ 
    public PostResponse() 
    { 
    } 

    public PostResponse(bool isValid, ResponseErrors responseType, string details, long leadIdentifier, 
         long vendorAccountAssigned, bool pendingQCReview, double price, string redirectUrl) 
    { 
     isValidPost = isValid; 
     ResponseType = responseType; 
     ResponseDetails = details; 
     LeadIdentifier = leadIdentifier; 
     VendorAccountAssigned = vendorAccountAssigned; 
     PendingQCReview = pendingQCReview; 
     Price = price; 
     RedirectURL = redirectUrl; 
    } 

    #region IPostResponse Members 

    public bool isValidPost { get; set; } 
    public ResponseErrors ResponseType { get; set; } 
    public string ResponseDetails { get; set; } 
    public long LeadIdentifier { get; set; } 
    public long VendorAccountAssigned { get; set; } 
    public bool PendingQCReview { get; set; } 
    public double Price { get; set; } 
    public string RedirectURL { get; set; } 

    #endregion 
} 
+0

? – Maess

+0

メソッドが返す出力の量はどれくらいですか?また、 "ビジー" whileループを実行する必要はありません。作成したスレッドでthread.Join()を実行できます。 – Candide

+0

コードを実行するのに6秒かかることがありますが、結果を返すためにIISが必要とする作業はどれくらいありますか? –

答えて

0

要求が掛かっている場合ASP.NETランタイムが同じユーザセッションからスレッドをブロックするであろう。あなたは、IISのリセットを行った後にテストを実行した回数

Why can’t I execute two requests from the same session simultaneously for an ASP.NET application?

+0

注意すべきことは、複数の同時リクエストにかかわらず、私のwebmethod全体が6秒かかります。遅延は、ブラウザに応答を返すとコードが実行された後に発生します。 – Joel

+0

*のみ*は6秒かかりますか? – x0n

+0

- x0n:POSTの平均実行時間は約500ミリ秒ですが、この例では、何百万行ものリアルタイムデータに対する重複チェック、Webサービス呼び出し、およびすべての通常の処理(データベース呼び出しなど)を行います。私を信頼してください... ANTSパフォーマンスプロファイラを使用してコードを最適化するボトルネックを見つけました。 SQLの速度が遅すぎる場合は、より高速なクエリのためにフラット/キャッシュデータ用にmongoを統合しました。 – Joel

関連する問題