2010-03-12 20 views
2

我消費,它返回一個簡單的計算結果對象像這樣的外部C#Web服務方法:.NET Web服務水合物自定義類

[Serializable] 
public class CalculationResult 
{ 
    public string Name { get; set; } 
    public string Unit { get; set; } 
    public decimal? Value { get; set; } 
} 

當我添加Web引用到我的ASP .NET這項服務項目Visual Studio非常友好,可以生成一個匹配的類,以便我可以輕鬆地使用它並使用它。我想使用Castle Windsor的其他方法來獲取計算結果對象,所以我想在我的解決方案中使用一個常見的類CalculationResult(或ICalculationResult),這樣我的所有對象都可以工作,這將始終匹配從外部Web Service 1:1返回的對象。

無論如何,我可以告訴我的Web服務客戶端水合一個特定的類,而不是它生成的一個?我不想做手工:

foreach(var fromService in calcuationResultsFromService) 
{ 
    ICalculationResult calculationResult = new CalculationResult() 
    { 
     Name = fromService.Name 
    }; 
    yield return calculationResult; 
} 

編輯:我很高興使用服務引用類型,而不是舊的Web引用的。

回答

0

首先,你的網絡服務 - 你爲什麼實際生成類?使用普通的共享類型。

http://www.codeproject.com/KB/WCF/WCFCollectionTypeSharing.aspx

這顯然是不消耗公共Web服務時的選擇,但是當你控制兩端...這有很多好處。

其中完整的代碼控制;)

+0

我不擁有我正在使用的ASP .NET 2.0 Web服務的代碼。 – row1 2010-03-12 08:05:53

+0

然後我建議帶着這些課程,並在他們生成時「處理它們」。將它們視爲DTO(Dta轉移對象)並儘快將它們移動到您自己的對象中。結果基本上是一個「只讀」文檔。不要在那裏添加方法。保持原樣。 – TomTom 2010-03-12 08:09:16