如果Web服务返回的名称确实很慢,那么Web服务方法是否有可能返回null?

时间:2018-08-10 17:37:38

标签: c# properties static lazy-evaluation

我下面有一个哑码;学校有2个静态成员,教师和学生,其列表是从其构造函数中的Web服务调用填充的。

我的问题是“如果Web服务返回的名称真的很慢,GetNamesOfTeachers或GetNamesOfStudents是否有可能返回null?”

谢谢您的帮助。

**FREE                                                                                              
// RFC Main Grid                                                                                    

CTL-OPT NOMAIN OPTION (*SRCSTMT : *NODEBUGIO);                                                      

DCL-PROC PUR027 EXPORT;                                                                             
  DCL-PI PUR027 EXTPROC(*DCLCASE);                                                                  
    StartingRow PACKED(3:0);                                                                        
    NbrOfRows PACKED(3:0);                                                                          
    Search CHAR(30);                                                                                
    SQLCODE PACKED(3:0);                                                                            
    RSL CHAR(2);                                                                                    
  END-PI;                                                                                           


IF Search = '';                                                                                     

  EXEC SQL Declare RSCURSOR cursor for                                                              
  SELECT *                                                                                          
  FROM CDPL03                                                                                       
  ORDER BY CDEPT, CDESC                                                                             
  OFFSET (:StartingRow - 1) * :NbrOfRows ROWS                                                       
  FETCH NEXT :NbrOfRows ROWS ONLY;                                                                  

  EXEC SQL  Open RSCURSOR;                                                                          

  EXEC SQL SET RESULT SETS Cursor RSCURSOR;                                                         

ELSE;                                                                                               

  EXEC SQL Declare RSCURSOR2 cursor for                                                             
  SELECT *                                                                                          
  FROM CDPL03                                                                                       
  WHERE CDESC LIKE '%' concat trim(:Search) concat '%' AND                                          
        CDEPT LIKE '%' concat trim(:Search) concat '%'                                              
  ORDER BY CDESC, CDEPT                                                                             
  OFFSET (:StartingRow - 1) * :NbrOfRows ROWS                                                       
  FETCH NEXT :NbrOfRows ROWS ONLY;                                                                  

  EXEC SQL  Open RSCURSOR2;                                                                         

  EXEC SQL SET RESULT SETS Cursor RSCURSOR2;                                                        

ENDIF;                                                                                              


// Validate for SQL errors                                                                          
IF SQLCODE  = 0;                                                                                    
  RSL = '00';                                                                                       
ELSEIF SQLCODE > 0;                                                                                 
  RSL = '10';                                                                                       
ELSEIF SQLCODE < 0;                                                                                 
  RSL = '20';                                                                                       
ENDIF;                                                                                              



//EXEC SQL SELECT COUNT(*)                                                                          
//  INTO :RowCount                                                                                  
//  FROM CDPL03;                                                                                    


RETURN;                                                                                             

END-PROC PUR027;                                                                                    


// To create the service program:                                                                   
//           CRTSRVPGM SRVPGM(BPCSO/PUR027WS)                                                       
//            MODULE(BPCSO/PUR027W)                                                                 
//            SRCFILE(BPCSS/PURBNDF) SRCMBR(PUR027WB)                                               

3 个答案:

答案 0 :(得分:0)

假设网络服务器没有超时并且由于您的调用是同步的,那么除非将其编程为返回null,否则这些函数不应返回null。

答案 1 :(得分:0)

这完全取决于GetTeachersFromService()的实现方式。如果该方法如下所示,则GetNamesOfTeachers将返回null。

public List<string> GetTeachersFromService()
{
     // Call web service    
     if (webServiceResponse.teachers.count > 0)
          return webServiceResponse.teachers;
     else return null; 
}

如果上述方法的其他部分包含return List<string>();,则您不会从GetNamesOfTeachers获得空列表。

答案 2 :(得分:0)

我不知道如何实现GetTeachersFromService()和GetStudentsFromService()的客户端代码(代理)。但是通常即使这些函数被同步调用,您也可以设置超时。如果服务在指定时间内没有响应,您将获得一个异常,可以在代码中处理该异常,例如

setActionBar()