我有一个简单的Silverlight应用程序,它只是将DataGrid的ItemsSource设置为Web服务的结果。这一切都运行正常,但现在我试图让它更抽象。我想将参数传递给Web服务并返回List<Customer>
或List<Product>
,例如,具体取决于参数。
但我似乎无法找到传回抽象列表的方法。它似乎必须是特定类型的列表。这是正确的吗?
谢谢,
AJ
答案 0 :(得分:2)
Web服务定义必须知道所返回内容的结构,以便它知道要包含在SOAP信封中的字段,以便该服务的订阅者知道要发生什么。如果你想要返回一个或另一个,你应该使用2个不同的服务或者创建一个既可以代表它们又返回它的集合的类型,那么你必须将它包装在客户端,这样你就可以隐藏细节了与具体用途无关。
例如,
struct CustomerOrProduct
{
ItemType type = ItemType.Customer; // This indicates the type that the struct is currently representing
string name; // This is for products and customers
string address; // This is for customers only
}
显然这个结构需要充实属性访问器等,但它应该给你一个想法。但是,我不建议这样做。相反,您应该为要检索的每种类型使用单独的服务。毕竟,如果您足够了解所需的类型作为参数,您就足以了解其他服务。