gpt4 book ai didi

c# - 如何在 WCF 中将接口(interface)用作 DataContract

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:52 26 4
gpt4 key购买 nike

我需要使用标准 wsdl 调用网络服务操作,但客户端和服务器中的数据对象必须不同。

在公共(public)库中使用数据对象的接口(interface),在客户端和服务器中为其创建代理类。

然后,我使用接口(interface)声明操作契约,但 WCF 不识别它。

我还尝试使用 DataContractSerializerBehavior 并设置 knownTypes,但没有成功。

有人可以帮助我吗?我附上了包含更多详细信息的完整解决方案。

public interface Thing
{
Guid Id {get;set;}
String name {get;set;}
Thing anotherThing {get;set;}
}

[DataContract]
public class ThingAtServer: BsonDocument, Thing // MongoDB persistence
{
[DataMember]
Guid Id {get;set;}
//...
}

[DataContract]
public class ThingAtClient: Thing, INotifyPropertyChanged // WPF bindings
{
[DataMember]
Guid Id {get;set;}
//...
}

[ServiceContract]
public interface MyService
{
[OperationContract]
Thing doSomething(Thing input);
}

点击此处查看Sample project on GitHub带有测试用例

最佳答案

我已经使用契约(Contract)创建了 WCF 服务:

[OperationContract]
CompositeTypeServer GetDataUsingDataContract( CompositeTypeServer composite );

我的 CompositeTypeServer 看起来像这样:

[DataContract( Namespace = "http://enes.com/" )]
public class CompositeTypeServer
{
[DataMember]
public bool BoolValue { get; set; }

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

然后我创建了类型为 CompositeTypeClient 的客户端项目:

[DataContract( Namespace = "http://enes.com/" )]
public class CompositeTypeClient
{
[DataMember]
public bool BoolValue { get; set; }

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

然后我将引用添加到我的服务并选择重用类型。一切都像魅力一样运作。我能够在客户端使用 CompositeTypeClient

所以诀窍是为 DataContract 指定命名空间,以便它们在客户端和服务上匹配。

[DataContract( Namespace = "http://enes.com/" )]

附言。我可以根据要求提供完整的 VS 解决方案。

关于c# - 如何在 WCF 中将接口(interface)用作 DataContract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15841636/

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