【问题标题】:Getting data from an object type in c#从 C# 中的对象类型中获取数据
【发布时间】:2013-11-10 16:12:40
【问题描述】:

我在服务器端存储了一个对象类型的类对象,我将其发送给客户端。如何从客户端的 Object 类型中检索类对象的数据成员的数据?我正在使用 WCF 进行通信。我是这个概念的新手。

Service Contract

  [ServiceContract]
  public interface IRCommService
  {
    [OperationContract]
    result sendMessage(string command, object data);
  }

  [DataContract]
  public class result
  {
    [DataMember]
    public List<string> results { get; set; }
  }


[service behavior]
 public result sendMessage(string command, object data)
    {
      List<string> l = new List<string>();
      Console.WriteLine("Received");
      return new result { results = l };
    }

【问题讨论】:

  • 需要更多信息,它是作为 XML 还是 JSON 返回给客户端?发布您目前拥有的所有代码,这将极大地帮助有人为您的问题提供解决方案。
  • 我有一个带有数据成员 int a 的简单类。我正在制作这个类的对象(a=10)。我想将这个类对象发送到客户端并获得这个值 10。我正在将类对象复制到 Object 类型中。如果这不是正确的方法,请建议我该怎么做。
  • 有一些演练向您展示了如何在“hello world”级别创建 WCF 服务器和客户端。请记住,WCF 服务器可以使用多种传输方式中的任何一种——命名管道、tcp 或 http,并且可以托管在 Windows 服务或 IIS 中。您如何实现客户端取决于您在服务器端选择的托管方式和传输方式。如果您将 WCF 服务添加到 IIS 网站,将 serviceMetadata 添加到 serviceBehaviors,并且服务正在运行,则只需在 .NET 客户端项目中添加服务引用即可构建客户端访问。

标签: c# wcf


【解决方案1】:

最好使用自定义请求对象而不是使用对象数据类型。该请求对象类对于客户端和服务器应该是通用的。然后在客户端中,您可以填写请求并从服务器检索所需的结果.

您的解决方案层次结构最好如下。

namespace ServerProj
{
    using System.ServiceModel;
    using Common;

    [ServiceContract]
    public interface IRCommService
    {
        [OperationContract]
        Result SendMessage(string command, CustomRequest data);
    }
}

namespace ServerProj
{
    using System.Collections.Generic;
    using Common;

    public class RCommService : IRCommService
    {
        public Result SendMessage(string command, CustomRequest data)
        {   // You can get the value from here
            int value = data.MyValue;

            Result result = new Result();
            List<string> list = new List<string>();
            list.Add("Sample");
            result.Rsults = list;

            return result;
        }
    }
}

通用程序集中的请求类

namespace Common
{
    using System.Runtime.Serialization;

    [DataContract]
    public class CustomRequest
    {
        [DataMember]
        public int MyValue { get; set; }
    }
}

通用程序集中的响应类

namespace Common
{
    using System.Collections.Generic;
    using System.Runtime.Serialization;

    [DataContract]
    public class Result
    {
        [DataMember]
        public List<string> Rsults { get; set; }
    }
}

然后在客户端添加为服务引用。

private void button1_Click(object sender, EventArgs e)
        {
            ServiceReference1.RCommServiceClient service = new ServiceReference1.RCommServiceClient();
            CustomRequest customRequest=new CustomRequest();
            customRequest.MyValue = 10;

            Result result = service.SendMessage("Test", customRequest);
        }

【讨论】:

    【解决方案2】:

    如果您真的需要这么大的灵活性,请考虑使用字典。话虽如此,拥有 10 个具有不同签名的服务方法可能比在一个服务方法中处理 10 个不同的输入要好。

    此外,传递自定义类也是一种常见做法。因此,如果您的对象有 10 个不同的东西,只需创建一个具有 10 个属性的类并设置您需要的任何一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 2016-10-24
      • 2021-09-26
      • 1970-01-01
      相关资源
      最近更新 更多