c# - (WCF - C#) 返回包含不同自定义类集合的自定义类

标签 c# wcf

我一直在互联网上漫游以寻找我的问题的答案,但尚未找到答案。

场景如下: 我有一个 WCF 库服务,它针对包含我的一些配置的数据库工作。这些配置由一些自定义类组成;

[DataContract]
public class Config : Object
{
    [DataMember]
    public int AppId { get; set; }

    [DataMember]
    public int VersionId { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public DateTime DateCreated { get; set; }

    [DataMember]
    private List<ParameterRow> ParameterRows = null;


[DataContract]
public class ParameterRow : Object
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public int Id { get; set; }

    [DataMember]
    private List<ParameterItem> parameterItems = null;
}

[DataContract]
public class ParameterItem : Object
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Value { get; set; }

    [DataMember]
    public string DataType { get; set; }
}

在那里你可以看到它们是如何相关的。我还包含了一个方法头,只是为了向您展示一个简单函数的示例。 我的当前代码可以很好地处理当前函数(包括数据库)。我还有一个 WCF 库服务,它从数据库中检索配置并提供给客户端(当他们调用该服务时)。下面是客户端调用服务的功能头。

public Config GetConfig(int id);

但是,我无法弄清楚如何在一次调用中为客户端获取完整的配置,并且仍然能够使用 Config 类的方法。 我知道如何使用数据成员并向客户端获取属性,但不知道如何使用集合或方法。我可以访问双方的配置类,目前我的想法已经用完了。

建议/提示有人吗?非常感谢!

编辑: 这是服务中的 GetConfig 方法:

public Config GetConfig(int id)
    {
        dbHandler = new DatabaseHandler(new StoredProceduresFake());
        resultConfig = dbHandler.GetLatestConfiguration(id);
        return resultConfig;
    }

这是调用的客户端(我刚刚创建了一个控制台应用程序来测试服务):

resultConfig = client.GetConfig(1);

但是在客户端函数中,我现在在所有配置属性上都遇到了错误。 在客户端 V-Studio 要我写 Config.Name = Namek_BackingField 而服务只需要写ConfigName。 而且我无法访问参数行列表,因此整个配置对我来说毫无用处。我的猜测是其余数据在 Config.ExtensionData 中,但我不知道如何访问它。

最终编辑;这已经解决。如下所述,只有属性从 WCF 服务通过网络发送。为了解决这个问题,我创建了另一个类,它从服务接收的类“Config”中提取数据,根据需要存储它,也让我有可能获得我自己的方法。这是解析数据的简单解决方案。 (在某种程度上嘿)。感谢所有帮助,非常感谢!

最佳答案

当您订阅 WCF 服务时,只会通过网络发送您的属性。我解决这个问题的方法是创建一个单独的类库来包含数据契约,然后这个类库可以被客户端和服务引用,所以它们共享方法的实现(通常不会与SOAP WSDL 绑定(bind))。

当您在客户端应用程序中创建对 WCF 服务的服务引用时,您可以选择重用共享类库中的类型,而不是使用 WSDL 构建客户端接口(interface),以便维护方法实现。

你很快就会遇到的事情是,有时只与服务器或客户端相关的函数是有帮助的(即:Validate( .. ) 函数可能只相关对客户端而言,GetData( .. ) 函数可能只在服务器上是必需的。在这些情况下,您应该使用扩展方法或从数据协定继承以重新定义它。

关于c# - (WCF - C#) 返回包含不同自定义类集合的自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19265580/

相关文章:

c# - 在 C# 中转义命令行参数

c# - 使用 WCF 设置 NTLM 身份验证到 Sharepoint Web 服务

c# - 在运行时设置默认命令行选项值

c# - 使用动态 Linq 查询子字符串时出错

c# - 为什么正则表达式在 C# 中挂起

wcf - Microsoft.Data.Services.Client.dll 与 System.Data.Services.Client.dll

WCF 客户端 - 如何处理或忽略 MustUnderstand header 元素?

c# - WCF 测试客户端中的 Async() 方法

c# - 在 WCF 服务库项目中使用自定义 ServiceHostFactory

c# - "Lazy"GroupBy 与 Linq