0

.net WCFサービスを使用するためにmonotouch(6.0.2)でBasicHttpBindingを使用してWCFを使用します。サーバーサイトで、タイプがint、int、DishOrder(ユーザー定義タイプ)の3つのパラメーターを渡します。 intパラメーターは正しくありますが、ユーザー定義オブジェクト(dishOrder)は常にnullです。なぜですか?

ユーザー定義型クラスで[DataContract]属性マークをすでに使用しました。

モノタッチで(クライアント側コード:)

[DataContract]
public class DishOrder2
{
    [DataMember]
    public int BillID { get; set; }
    [DataMember]
    public int TableID { get; set; }
}

public partial interface IMenuContract
{
    [OperationContract]
    int OpenTable(int tableID, int lastVerNo,DishOrder2 order);
}

public partial class MyServiceClient : ClientBase<IMenuContract>,IMenuContract  {
    public int OpenTable(int tableID, int lastVerNo,DishOrder2 order)
    {
        return Channel.OpenTable(tableID,lastVerNo,order);
    }   

    private partial class FDMenuServiceClientChannel
    {
        public  int OpenTable(int tableID, int lastVerNo,DishOrder2 order)
        {
            object[] _args = new object[3];

            _args[0]=tableID;
            _args[1]=lastVerNo;
            _args[2]=order;
            return (int)base.Invoke("OpenTable", _args);
        }
    }
} //end of public partial class FDMenuServiceClient 



   pulic void CallServiceTest()
  {
            using (MyServiceClient.serviceClient = MyServiceClient.CreateServiceClient ()) {
                  DishOrder2 test=new DishOrder2();
            test.BillID=123;
            test.TableID=456;
                serviceClient.OpenTable(111,222,test);
            }
  }

サービスサイト(.net 3.5)コード:

[DataContract]
public class DishOrder2
{
    [DataMember]
    public int BillID { get; set; }
    [DataMember]
    public int TableID { get; set; }
}

[OperationContract]
int OpenTable(int tableID, int lastVerNo,DishOrder2 order);

    public int OpenTable(int tableID, int lastVerNo,DishOrder2 dishOrder)  //service implementation
    {
        try
        {
            //**---why the object:dishorder is null?** throw the nullref exception
            if (dishOrder.BillID>0)  ...                  
            //**tableID & lastVerNo is read OK 111,222**  
                  ...             
        }
        catch (Exception ex)
        {
            throw FaultException...            
         }
    }
4

1 に答える 1

0

オブジェクトをモノタッチで自動シリアル化できない理由がわからないので、自分でシリアル化する必要があります。それは今働くことができます、すべてに感謝します。

    public static string XmlSerialize<T>(T obj)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            serializer.Serialize(ms, obj);
            ms.Seek(0, SeekOrigin.Begin);
            using (StreamReader reader = new StreamReader(ms, Encoding.UTF8))
            {
                return reader.ReadToEnd();
            }
        }
    }
于 2012-10-09T01:51:50.307 に答える