我最近开始使用WCF(我知道游戏的后期)并且正在使用MessageContracts“玩”。
我有一个非常简单的场景,我有一个ServiceContract有2个OperationContracts; GetProduct和GetProductList。 GetProduct接受ProductRequest并返回ProductObject。 GetProductList获取ProductListRequest并返回ProductListObject。每个都显示如下。
当我创建一个Windows窗体应用程序并使用Web服务时,我希望GetProduct返回一种Product和GetProductList来返回一个ProductList类型,它有一个名为Products的MessageBodyAttribute,它是Product类的数组。由GetProduct返回。
但是,GetProduct方法现在返回Product1对象,而不是Product。如果我得到产品列表,则数组中的项目按预期类型为Product。
似乎我无意中为Product创建了2个类,并且想知道我可以做些什么来解决这个问题,所以我只有一个Product类,而不是Product和Product1。
[ServiceContract]
public interface IWCFMessageContractTest
{
[OperationContract]
Product GetProduct(ProductRequest request);
[OperationContract]
ProductList GetProductList(ProductListRequest request);
}
public class WCFService : IWCFMessageContractTest
{
public Product GetProduct(ProductRequest request)
{
string Licence = request.LicenceKey;
return new Product("Product Description");
}
public ProductList GetProductList(ProductListRequest request)
{
string Licence = request.LicenceKey;
List<Product> products = new List<Product>();
products.Add(new Product("Product 1"));
products.Add(new Product("Product 2"));
products.Add(new Product("Product 3"));
ProductList productList = new ProductList(products.ToArray<Product>());
return productList;
}
}
[MessageContract(IsWrapped = true, WrapperName = "ProductRequestObject", WrapperNamespace = "http://mytest.org/Product")]
public class ProductRequest
{
[MessageHeader(Namespace = "http://mytest.org/Product")]
public string LicenceKey { get; set; }
[MessageBodyMember(Namespace = "http://mytest.org/Product")]
public string ProductID { get; set; }
}
[MessageContract(IsWrapped = true, WrapperName = "ProductObject", WrapperNamespace = "http://mytest.org/Product")]
public class Product
{
[MessageBodyMember(Namespace = "http://mytest.org/Product")]
public string Description { get; set; }
public Product() { }
public Product(string description)
{
Description = description;
}
}
[MessageContract(IsWrapped = true, WrapperName = "ProductListRequestObject", WrapperNamespace = "http://mytest.org/ProductList")]
public class ProductListRequest
{
[MessageHeader(Namespace = "http://mytest.org/ProductList")]
public string LicenceKey { get; set; }
}
[MessageContract(IsWrapped = true, WrapperName = "ProductListObject", WrapperNamespace = "http://mytest.org/ProductList")]
public class ProductList
{
[MessageBodyMember(Namespace = "http://mytest.org/ProductList")]
public Product[] Products { get; set; }
public ProductList() { }
public ProductList(Product[] ProductArray)
{
Products = ProductArray;
}
}
感谢。