2011-03-11 38 views
2

我開發了一個與IBM ClearQuest交互的應用程序。問題是,當我在本地運行所有東西時,例如,運行webservice local,然後在本地ASP頁面,所有內容都以我期望的速度運行。當我將webservice(預編譯)發佈到服務器並通過服務器運行網頁時,對webmethod的調用至少需要10倍的時間。我不知道爲什麼會發生這種情況。我製作了一個控制檯應用程序,它具有問題的功能,並在服務器和本地執行它們,並且它們都返回相同的時間(大致),正如當我移動到通過webmethod執行時,一切都會以蝸牛的速度進行。有任何想法嗎?這種情況每次都會發生,而不僅僅是第一次通話。與我作爲Windows應用程序運行時相比,WebMethod()的每次執行都很慢

的WebMethod:

Public Function RetrieveQueryResults(ByRef cqSession As ClearQuestOleServer.Session, _ 
             ByVal sqlStmt As String) As List(Of SearchResultsSingleIssue) 

    Dim numCols As Integer, status As Integer, columnIdx As Integer 
    Dim numRows As Integer 
    Dim rowContents As String = "" 
    Dim colValue As New Object 
    Dim colLabel As New Object 
    Dim allitems As New List(Of SearchResultsSingleIssue) 
    Dim results As New SearchResultsSingleIssue 
    Dim cqResultSet As ClearQuestOleServer.OAdResultset 

    cqResultSet = cqSession.BuildSQLQuery(sqlStmt) 
    cqResultSet.Execute() 

    ' Get the number of columns returned by the query. 
    numRows = 0 
    numCols = cqResultSet.GetNumberOfColumns 
    status = cqResultSet.MoveNext 


    ' Collect query results. 
    Do While status = AD_SUCCESS 
     results = New SearchResultsSingleIssue 
     numRows = numRows + 1 

     For columnIdx = 1 To numCols 

      colLabel = cqResultSet.GetColumnLabel(columnIdx) 
      colValue = cqResultSet.GetColumnValue(columnIdx) 

      'Make sure that we dont pass along a null reference 
      If colValue = Nothing Then 
       colValue = "" 
      End If 

      Select Case colLabel 
       Case "ID" 
        results.IssueID = colValue 
       Case "HEADLINE" 
        results.Headline = colValue 
       Case "NAME" 
        results.State = colValue 
       Case "OE_CONTACT" 
        results.OEContact = colValue 
       Case "DESCRIPTION" 
        results.Further_Description = colValue 
       Case "PRODUCT_NAME" 
        results.Product_Name = colValue 
       Case "FUNCTIONAL_AREA" 
        results.Functional_Area = colValue 
       Case "SUBTOPIC" 
        results.Subtopic = colValue 
       Case "FOUND_VERSION" 
        results.Found_In = colValue 
       Case "SCHEDULED_VERSION" 
        results.Scheduled_For = colValue 
       Case "SYMPTOMS" 
        results.Symptoms = colValue 
       Case "AFFECTED_SYSTEMS" 
        results.Affected_System_Types = colValue 
       Case "ISSUE_TYPE" 
        results.Issue_Type = colValue 
       Case "ASSIGNED_TO" 
        results.Assigned_Developer = colValue 
       Case "TESTED_BY" 
        results.Assigned_Tester = colValue 
       Case "BUILT_VERSION" 
        results.Built_In = colValue 
       Case "TESTED_VERSION" 
        results.Tested_In = colValue 
       Case "NOTES_LOG" 
        results.Notes_Log = colValue 
       Case "CUSTOMER_SEVERITY" 
        results.Severity = colValue 
       Case "PRIORITY" 
        results.Priority = colValue 

      End Select 

     Next columnIdx 

     ' Add the query row result to the compiled list of all rows. 
     allitems.Add(results) 
     status = cqResultSet.MoveNext 

    Loop 

    Return allitems 

End Function 

本地Windows應用程序的方法:

private void button2_Click(object sender, EventArgs e) 
    { 
     start = DateTime.Now.TimeOfDay.Seconds; 

     int numCols = 0; 
     int status = 0; 
     int columnIdx = 0; 
     int numRows = 0; 
     string rowContents = ""; 
     string colValue; 
     string colLabel; 
     List<SearchResultsSingleIssue> allitems = new List<SearchResultsSingleIssue>(); 
     SearchResultsSingleIssue results = new SearchResultsSingleIssue(); 
     ClearQuestOleServer.OAdResultset cqResultSet = default(ClearQuestOleServer.OAdResultset); 

     cqResultSet = (ClearQuestOleServer.OAdResultset)ClearQuestSession.BuildSQLQuery(sqlStatement); 
     cqResultSet.Execute(); 

     // Get the number of columns returned by the query. 
     numRows = 0; 
     numCols = cqResultSet.GetNumberOfColumns(); 
     status = cqResultSet.MoveNext(); 


     // Collect query results. 
     while (status == 1) 
     { 
      results = new SearchResultsSingleIssue(); 
      numRows = numRows + 1; 


      for (columnIdx = 1; columnIdx <= numCols; columnIdx++) 
      { 
       colLabel = (string)cqResultSet.GetColumnLabel(columnIdx); 
       colValue = (string)cqResultSet.GetColumnValue(columnIdx); 
       //Make sure that we dont pass along a null reference 
       if (colValue == null) 
       { 
        colValue = ""; 
       } 

       switch (colLabel) 
       { 
        case "ID": 
         results.IssueID = colValue; 
         break; 
        case "HEADLINE": 
         results.Headline = colValue; 
         break; 
        case "NAME": 
         results.State = colValue; 
         break; 
        case "OE_CONTACT": 
         results.OEContact = colValue; 
         break; 
        case "DESCRIPTION": 
         results.Further_Description = colValue; 
         break; 
        case "PRODUCT_NAME": 
         results.Product_Name = colValue; 
         break; 
        case "FUNCTIONAL_AREA": 
         results.Functional_Area = colValue; 
         break; 
        case "SUBTOPIC": 
         results.Subtopic = colValue; 
         break; 
        case "FOUND_VERSION": 
         results.Found_In = colValue; 
         break; 
        case "SCHEDULED_VERSION": 
         results.Scheduled_For = colValue; 
         break; 
        case "SYMPTOMS": 
         results.Symptoms = colValue; 
         break; 
        case "AFFECTED_SYSTEMS": 
         results.Affected_System_Types = colValue; 
         break; 
        case "ISSUE_TYPE": 
         results.Issue_Type = colValue; 
         break; 
        case "ASSIGNED_TO": 
         results.Assigned_Developer = colValue; 
         break; 
        case "TESTED_BY": 
         results.Assigned_Tester = colValue; 
         break; 
        case "BUILT_VERSION": 
         results.Built_In = colValue; 
         break; 
        case "TESTED_VERSION": 
         results.Tested_In = colValue; 
         break; 
        case "NOTES_LOG": 
         results.Notes_Log = colValue; 
         break; 
        case "CUSTOMER_SEVERITY": 
         results.Severity = colValue; 
         break; 
        case "PRIORITY": 
         results.Priority = colValue; 

         break; 
       } 

      } 

      // Add the query row result to the compiled list of all rows. 
      allitems.Add(results); 
      status = cqResultSet.MoveNext(); 


     } 

     seconds = (DateTime.Now.TimeOfDay.Seconds - start); 
     label3.Text = seconds.ToString(); 



    } 

的代碼應該執行約... 6秒。

回答

2

通常情況下,這可以歸結爲權限問題。例如,Web服務期望匿名用戶還是使用Windows身份驗證。這也會影響網站。所以我會開始研究這一點。

無論如何,我會強烈建議您在https://codereview.stackexchange.com/之後發佈您的代碼。您可能會收到一些關於如何更好地構建您所做的事情的反饋。

+0

好的我也在那裏發佈。讓我看看設置。 – 2011-03-11 22:52:56

+0

他們沒有給我任何輸入。代碼很好,我猜。 – 2011-03-17 20:11:55

相關問題