0

Product クラス オブジェクトのリストを含む Order クラス オブジェクトを受け取る単純な従来の Web サービスを VS2008 C# で実装する必要があります。クライアントで Order クラス オブジェクトのインスタンスを作成すると、問題が発生します。これはプロキシで宣言され、メソッドが含まれていないため、製品のリストは単に System.Array になっているため、製品を追加する機会がありません。

正常に機能する 1 つの方法は、クライアントで手動で XML にシリアライズし、Web サービスでデシリアライズすることです。このようにして、Web サービスとクライアント アプリケーションの間で共有される DLL に分離した同じクラス宣言を使用します。ただし、共有DLLと手動シリアライゼーションをまったく使用しないようにすることは可能であると言われていますが、その方法、つまり Order クラスをどのように宣言/定義する必要があるのか​​ 、メソッドを持つためにはどこに必要なのかがわかりませんクライアントで?

現在、クラスは共有 DLL で次のように定義されています。

namespace MyNS
{
    [Serializable]
    public class ProductInfo { 
        public Int32 ProductID;
        public Int32 Quantity;
        public decimal CurrPrice;

        public VE_ProductInfo() { 
            ProductID = 0;
            Quantity = 0;
            CPrice = 0;
        }

        public ProductInfo(Int32 pId, Int32 quant, decimal cprice)
        {
            ProductID = pId;
            Quantity = quant;
            CPrice = cprice;
        }
    }

    [Serializable]
    public class OrderInfo
    {
        public Int32 CustomerId = 0;

        public OrderInfo () {
            Items = new List<ProductInfo>();
        }

        [XmlArray]
        public List<ProductInfo> Items {get; set;}

        public string SpecialInstructions;

        public void AddProduct(ProductInfo pi)
        {
            Items.Add(pi);
        }
    }
}

このクラスは、Web サービス メソッドで次のように使用されます。

public bool CreateOrder(OrderInfo Order) {
    // some code
}

そして、クライアントから次のように呼び出されます。

WebService.MyWebService s;

WebService.OrderInfo o = new WebService.OrderInfo();

o.CustomerId = 1;
o.Items.Add(new ProductInfo(2, 4));
o.Items.Add(new ProductInfo(1, 2, 3.95m));

checkBox1.Checked = s.CreateOrder(o);
4

2 に答える 2