使用MessageContracts在WCF Web服务中的数组

时间:2016-06-30 11:45:16

标签: c# web-services wcf

我最近开始使用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;
    }
}

感谢。

0 个答案:

没有答案