2011-03-11 3 views
2

IBM ClearQuest와 상호 작용하는 응용 프로그램을 개발했습니다. 문제는 웹 서비스를 로컬로 실행 한 다음 ASP 페이지를 로컬로 실행하면 모든 것이 로컬에서 실행될 때 모든 것이 예상 한 속도가된다는 것입니다. 웹 서비스 (미리 컴파일 된)를 서버에 게시하고 서버를 통해 웹 페이지를 실행하면 webmethod 호출에 적어도 10 배의 시간이 걸립니다. 나는 이것이 왜 일어나고 있는지 모른다. 문제의 기능을 가진 콘솔 응용 프로그램을 만들어서 서버에서 실행하고 로컬로 실행하면 둘 다 달팽이 속도로 갈기위한 웹 메서드를 통해 실행하는 것과 동일한 양의 시간을 반환합니다. 어떤 아이디어? 이것은 첫 번째 호출뿐만 아니라 매번 발생합니다.WebMethod()는 Windows 응용 프로그램으로 실행할 때와 비교할 때 각 실행이 느립니다.

의 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(); 



    } 

코드는 육초에 대해 ...에서 실행해야합니다.

답변

2

일반적으로 이와 같은 문제는 사용 권한 문제로 이어집니다. 예를 들어 웹 서비스가 익명 사용자를 기다리고 있거나 Windows 인증을 사용하고 있는지 확인합니다. 이는 웹 사이트에도 영향을 미칩니다. 그래서 나는 그것을 조사하기 시작할 것입니다.

에 관계없이 코드를 https://codereview.stackexchange.com/에 게시하는 것이 좋습니다. 수행 한 작업을 구조화하는 방법에 대한 의견이있을 수 있습니다.

+0

나는 그곳에 너무 올랐다. 설정을 살펴 보겠습니다. –

+0

그들은 나에게 어떤 의견도주지 않았다. 코드는 좋을 것 같습니다. –