【发布时间】:2010-10-23 21:09:35
【问题描述】:
在实现 WCF 服务所需的接口中,我用[ServiceContract()] 属性声明主类,用[OperationContract()] 声明任何公开的方法。
如何公开公共属性?谢谢
【问题讨论】:
在实现 WCF 服务所需的接口中,我用[ServiceContract()] 属性声明主类,用[OperationContract()] 声明任何公开的方法。
如何公开公共属性?谢谢
【问题讨论】:
你不能。这不是它的工作原理。仅限方法。
【讨论】:
属性是组件接口的面向对象方面。 WCF 是关于服务,您必须在其中考虑和设计组件之间的交互顺序。
由于往返成本、潜在的昂贵状态管理和版本控制挑战,面向对象不能很好地扩展到分布式场景(您的代码在多个服务器甚至多个进程中执行)。但是,OO 仍然是设计服务内部的好方法,尤其是在它们很复杂的情况下。
【讨论】:
由于属性的 get 部分是一种方法,这在技术上是可行的,但正如前面的答案/cmets 中所提到的,这可能是不可取的;只是张贴在这里作为一般知识。
服务合同:
[ServiceContract]
public interface IService1
{
string Name
{
[OperationContract]
get;
}
}
服务:
public class Service1 : IService1
{
public string Name
{
get { return "Steve"; }
}
}
从您的客户端代码访问:
var client = new Service1Client();
var name = client.get_Name();
【讨论】:
您可以公开属性,但您必须使用[DataContract] 属性,并且可以将属性声明为属性的[DataMember] 属性。
【讨论】:
请不要将属性公开为 Web 方法。这在 HTTPS 中不起作用。我花了很多时间来识别和解决这个问题。最好的方法是在 WCF 中编写一个具体的返回方法。
【讨论】: