2010-03-12 23 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