2016-04-14 37 views
1

我有一個WCF服務,它返回一個類對象。我如何在我的客戶端應用程序中訪問這些返回值。由WCF返回的客戶端訪問對象

的服務代碼:

public ET_ITAM_RequestDetails GetAssociateFreewareRequestDetails(ET_ITAM_RequestDetails objET_ITAM_RequestDetails) 
{ 
    SqlDataReader rdr = null; 
    connect.Open(); 
    SqlCommand cmd = new SqlCommand("ET_ITAM_GetAssociateFreewareRequestDetails", connect); 
    cmd.CommandType = CommandType.StoredProcedure; 

    while (rdr.Read()) 
    { 
     objET_ITAM_RequestDetails.AssociateID = (string)rdr[0]; 
     objET_ITAM_RequestDetails.AssetID = (string)rdr[1]; 
     objET_ITAM_RequestDetails.ETRequestID = (int)rdr[2]; 
     objET_ITAM_RequestDetails.FreewareName = (string)rdr[3]; 
     objET_ITAM_RequestDetails.InstallationCommand = (string)rdr[4]; 
     objET_ITAM_RequestDetails.InstallationArguments = (string)rdr[5]; 
     objET_ITAM_RequestDetails.VerificationType = (bool)rdr[6]; 
     objET_ITAM_RequestDetails.VerificationPath = (string)rdr[7]; 
    } 

    return objET_ITAM_RequestDetails; 
} 

在客戶端:

ServiceReference1.ET_ITAM_RequestDetails objItam = new 

ServiceReference1.ET_ITAM_RequestDetails(); 

// need to get return value. 
// if i create another object it not work as expected 
obj_service.GetAssociateFreewareRequestDetails(objItam); 

回答

1

來看由ServiceReference1看起來你已經成功地將您的WCF參考客戶端解決方案。據我所知,您仍然錯過了WCF客戶端。

您還沒有給予足夠的信息來知道你的客戶端將被調用,但你的代碼看起來應該是這樣的:

ServiceReference1.ET_ITAM_RequestDetails objItam = new 
    ServiceReference1.ET_ITAM_RequestDetails(); 

// the service generation will create a WCF client for you, thought I'm not sure what your client's name would be. 
objItam = obj_service.GetAssociateFreewareRequestDetails(objItam); 

尋找你的代碼再次,我想我看到您的問題。你做了新的你的wcf客戶端,但沒有提供代碼。

obj_service.GetAssociateFreewareRequestDetails(objItam); 

您只是簡單地調用該函數,但不會將其值返回給您的對象。

objItam = obj_service.GetAssociateFreewareRequestDetails(objItam); 

我不明白爲什麼你正在創建一個空對象,將它傳遞給你的函數,並返回它。爲什麼不只是將它新增並在函數中返回?

public ET_ITAM_RequestDetails GetAssociateFreewareRequestDetails() 
{ 
    ET_ITAM_RequestDetails objET_ITAM_RequestDetails = new ET_ITAM_RequestDetails(); 

    SqlDataReader rdr = null; 
    connect.Open(); 
    SqlCommand cmd = new SqlCommand("ET_ITAM_GetAssociateFreewareRequestDetails", connect); 
    cmd.CommandType = CommandType.StoredProcedure; 

    while (rdr.Read()) 
    { 
     objET_ITAM_RequestDetails.AssociateID = (string)rdr[0]; 
     objET_ITAM_RequestDetails.AssetID = (string)rdr[1]; 
     objET_ITAM_RequestDetails.ETRequestID = (int)rdr[2]; 
     objET_ITAM_RequestDetails.FreewareName = (string)rdr[3]; 
     objET_ITAM_RequestDetails.InstallationCommand = (string)rdr[4]; 
     objET_ITAM_RequestDetails.InstallationArguments = (string)rdr[5]; 
     objET_ITAM_RequestDetails.VerificationType = (bool)rdr[6]; 
     objET_ITAM_RequestDetails.VerificationPath = (string)rdr[7]; 
    } 

    return objET_ITAM_RequestDetails; 
} 

以上(和你原來的)當然會(可能)意外的結果,如果你的讀者多行 - 只是打電話說出來的情況下,你並不知道。

+0

**不要對WCF客戶端使用'''**:[避免使用語句的問題](https://msdn.microsoft.com/zh-cn/library/aa355056(v = vs.110) .aspx) – Tim

+0

我已成功添加服務參考,如下所示。 ServiceReference1.ETServiceClient obj_service = new ServiceReference1.ETServiceClient();我在客戶端添加了ET_ITAM_RequestDetails的一個對象,它是我的服務的返回類型。 ServiceReference1.ET_ITAM_RequestDetails objItam = new ServiceReference1.ET_ITAM_RequestDetails(); – jerin

相關問題