Tag: known types

使用与WCF的接口

我已经谷歌搜索并阅读了几个小时,我找不到任何处理我特定情况的人… 我想在我的WCF服务合同中使用接口来松散地将服务从线路每端使用的类中耦合出来。 这将使我们能够拥有一个低级程序集,其中只包含我们可以提供给顾问的服务和数据合同(只是接口)。 在他们的结束时,他们可以实例化他们的数据类,实现我们的数据合同接口,通过网络将它发送给我们,然后我们的WCF服务将转换/转换/任何传入的数据到我们的实现的数据类的版本相同的界面。 这是一个例子。 IDataContract包含我想通过网络传输的裸信息。 端点和其他特定于WCF的配置都是默认的东西(我的问题可能在于,所以如果我需要更改内容,我可以包含更多内容)。 编辑 :我已经包含了更多的代码,并重命名了几个类,以帮助它减少混乱。 DataContractAttributes的名称和命名空间添加,以及配置文件中的两个部分是基于此博客文章中的信息的新增内容。 如果我切换到抽象基类而不是接口, 它就可以工作 。 但是,如果可能的话,我想使用接口。 共享库(我的代码,与客户作者共享): public interface IDataContract { string MyProperty { get; set; } } [ServiceContract] public interface ITestService { [OperationContract] IDataContract TestSharedInterface(IDataContract clientData); } 客户代码(他们的): [DataContract(Name = “IDataContract”, Namespace = “http://services.sliderhouserules.com”)] public class ClientDataClass : IDataContract { [DataMember] public string MyProperty { get; […]

Config中System.Object的WCF已知类型

我正在尝试在配置中指定一个已知类型,但我遇到的问题是它派生自Object。 我可以通过属性指定已知类型。 但在这种情况下,我需要从配置中使其工作。 这是一个例子。 以下工作正常: [ServiceContract] [ServiceKnownType(typeof(MyData))] public interface IContract { [OperationContract] void Send(object data); } [DataContract] public class MyData { [DataMember] public string Message { get; set; } } 但是,如果我删除ServiceKnownType属性并将以下内容放入配置中: 我得到一个ConfigurationErrorsException,消息“属性’type的值’无效。错误是:System.Object类型不能用作config中的声明类型。” 无论如何通过配置使这项工作?

通常被接受的方法来避免每个派生类的KnownType属性

是否有一种普遍接受的方法来避免在WCF服务上使用KnownType属性? 我一直在做一些研究,看起来有两种选择: 数据合同解析器 NetDataContractSerializer 我不是每次添加新类型时都必须静态添加KnownType属性的忠实粉丝,因此想要避免它。 是否应该使用第三种选择? 如果是这样,它是什么? 如果没有,上述两个选项中的哪一个是正确的方法? 编辑 – 使用方法 第三种选择是使用reflection [DataContract] [KnownType(“DerivedTypes”)] public abstract class FooBase { private static Type[] DerivedTypes() { return typeof(FooBase).GetDerivedTypes(Assembly.GetExecutingAssembly()).ToArray(); } }