2013-05-22 14 views
3

如何交换我想2个.Net应用程序用C#之间交换数据对象之间2的.Net应用

,交流沟通我也跟着this tutorial,介绍基本的HTTP服务,并将它与字符串交换完美。

现在,我想送我的自定义对象,但是当我重新生成服务,又名Message chat(Message msg)新方法没有映射。

这里是我的代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.Serialization; 
using System.Runtime.Serialization.Formatters.Binary; 

namespace StairWays.Messaging 
{ 
    /// <summary> 
    /// Classe permettant d'échanger des messages unifiés entre les différentes couches/fonctions 
    /// </summary> 
    [Serializable()] 
    public class Message : ISerializable 
    { 
     /// <summary> 
     /// Identification de l'emetteur 
     /// </summary> 
     public string sender { get; private set; } 
     /// <summary> 
     /// Service demandé 
     /// </summary> 
     public string invoke { get; private set; } 
     /// <summary> 
     /// Statut de l'opération demandée 
     /// </summary> 
     public bool status { get; private set; } 
     /// <summary> 
     /// Informations complémentaires 
     /// </summary> 
     public string info { get; private set; } 
     /// <summary> 
     /// Données à transférer 
     /// </summary> 
     public object[] data { get; private set; } 
     /// <summary> 
     /// Jeton de sécurité de l'application 
     /// </summary> 
     public string token { get; private set; } 
     /// <summary> 
     /// Constructeur permettant de construire le message permettant l'échange uniformisé 
     /// </summary> 
     /// <param name="sender">Identification de l'emetteur du message</param> 
     /// <param name="Invoke">Nommage du service demandé</param> 
     /// <param name="status">Permet au récepteur d'indiquer au destinataire si le traitement de l'opération demandé est un succès ou un échec</param> 
     /// <param name="info">Informations complémentaires</param> 
     /// <param name="data">Données à transférer</param> 
     /// <param name="token">Jeton de sécurité de l'application</param> 
     public Message(string sender, string invoke, bool status, string info, object[] data, string token) 
     { 
      this.sender = sender; 
      this.invoke = invoke; 
      this.status = status; 
      this.info = info; 
      this.data = data; 
      this.token = token; 
     } 

     /// <summary> 
     /// Deserialization constructor. 
     /// </summary> 
     /// <param name="info"></param> 
     /// <param name="ctxt"></param> 
     public Message(SerializationInfo info, StreamingContext ctxt) 
     { 
      this.sender = (String)info.GetValue("sender", typeof(string)); 
      this.invoke = (String)info.GetValue("invoke", typeof(string)); 
      this.status = (bool)info.GetValue("status", typeof(bool)); 
      this.info = (String)info.GetValue("info", typeof(string)); 
      this.data = (Object[])info.GetValue("data",typeof(Object[])); 
      this.token = (String)info.GetValue("token", typeof(string)); ; 
     } 

     /// <summary> 
     /// Serialization function. 
     /// </summary> 
     /// <param name="info"></param> 
     /// <param name="ctxt"></param> 
     public void GetObjectData(SerializationInfo info, StreamingContext ctxt) 
     { 
      //You can use any custom name for your name-value pair. But make sure you 
      // read the values with the same name. For ex:- If you write EmpId as "EmployeeId" 
      // then you should read the same with "EmployeeId" 
      info.AddValue("sender", sender); 
      info.AddValue("invoke", invoke); 
      info.AddValue("status", status); 
      info.AddValue("info", info); 
      info.AddValue("data", data); 
      info.AddValue("token", token); 
     } 


    } 
} 
+2

代码是否很长?我无法从我所在的位置访问PasteBin,并且该帖子中的一些相关代码显着增加了答案的机会。 –

+0

不长,它只是实现对象的可串行化接口。 – Annhydrium

回答

4

如果你使用WCF,你应该实现数据合同。您需要使用对属性和类本身的注释来注释数据类,以便WCF可以正确传递它。

然后在您的服务方法,通过它实现为数据合同的对象。然后

WCF将连载此对象在最有效的方式(例如SOAP将发送XML,但是NetTCP和了NamedPipes将发送一个优化的二进制格式)。

请参阅此链接:MSDN Data Contract Tutorial

[DataContract] 
public class Message 
{ 
    [DataMember] 
    public string Info {get; set;} 

    //Other Properties. 
} 
+0

它的工作;)。 但我无法投射物体:/ – Annhydrium

相关问题