使界面在 WCF Web 服务中可见
Posted
技术标签:
【中文标题】使界面在 WCF Web 服务中可见【英文标题】:Making an interface visible across WCF web services 【发布时间】:2011-10-01 06:11:25 【问题描述】:我想在我的 Web 服务层中声明一个接口,然后让调用者通过代理创建此接口类型的对象并使用它们来调用服务方法。 但是,当我使用 DataContract 属性装饰接口时,我收到一条错误消息,指出该属性只能应用于类、结构和枚举。我认为 ServiceContract 属性没有意义,因为我试图公开的接口仅用于数据传输目的。我还注意到,当使用 ServiceContract 装饰界面时,它不会显示在创建的代理类中。 解决此问题的最佳做法是什么?
【问题讨论】:
【参考方案1】:接口上使用服务契约,即服务的名称。数据协定用于类,即您发送过来的数据。
界面上的ServiceContract OperationContract 方法 类上的DataContract 属性上的DataMember见:http://msdn.microsoft.com/en-us/magazine/cc163647.aspx
【讨论】:
我理解其中的区别。我的问题是:我需要什么属性来装饰界面以使其通过代理可见?【参考方案2】:你不能那样做。 “DataContract”接口不能作为元数据的一部分公开。此外,即使您共享接口(在汇编中),您的客户端也无法将其实现发送回您的服务,因为接收方需要反序列化实例的真实类型。
【讨论】:
谢谢。这就说得通了。我需要什么属性来装饰接口以便生成代理?当没有属性并尝试生成代理时,我收到错误:无法激活服务。无法加载类型 InterfaceType。 你想做什么?如果您希望将接口公开为服务(即用于代理生成的服务),则使用ServiceContract
标记其方法,使用OperationContract
标记其方法。
我想在我的服务层中定义一个接口,我的一些服务对象将实现它。但是,如果我只是创建一个没有属性的公共接口,并让一个标有 [DataContract] 的对象实现它,我会在尝试浏览 .svc 文件时收到“无法加载类型 'InterfaceType' 错误。以上是关于使界面在 WCF Web 服务中可见的主要内容,如果未能解决你的问题,请参考以下文章
iPhone Web 服务通过证书身份验证调用 WCF 服务
想要将 WCF Web 服务作为 Windows 服务托管,而不是在 IIS 中托管