gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:39:21 25 4
gpt4 key购买 nike

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

场景如下:我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com