Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF服务是否公开属性?_C#_Wcf - Fatal编程技术网

C# WCF服务是否公开属性?

C# WCF服务是否公开属性?,c#,wcf,C#,Wcf,在实现WCF服务所需的接口中,我使用[ServiceContract()]属性声明main类,并使用[OperationContract()]声明任何公开的方法 如何公开公共属性?谢谢你不能。这不是它的工作原理。仅限方法。属性是组件接口的面向对象方面。WCF是关于服务的,在这里,您必须考虑并设计组件之间的交互顺序 由于往返成本、潜在的昂贵状态管理和版本控制挑战,面向对象无法很好地扩展到分布式场景(代码在多台服务器上甚至在多个进程中执行)。然而,OO仍然是设计服务内部的一种好方法,特别是如果它们很

在实现WCF服务所需的接口中,我使用
[ServiceContract()]
属性声明main类,并使用
[OperationContract()]
声明任何公开的方法


如何公开公共属性?谢谢

你不能。这不是它的工作原理。仅限方法。

属性是组件接口的面向对象方面。WCF是关于服务的,在这里,您必须考虑并设计组件之间的交互顺序

由于往返成本、潜在的昂贵状态管理和版本控制挑战,面向对象无法很好地扩展到分布式场景(代码在多台服务器上甚至在多个进程中执行)。然而,OO仍然是设计服务内部的一种好方法,特别是如果它们很复杂的话

由于属性的get部分是一种方法,这在技术上是可行的,但正如前面的回答/评论所述,这可能不可取;只是把它贴在这里作为一般知识

服务合同:

[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();
服务:

[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();
从您的客户端代码访问:

[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中返回

的确如此。只是为了扩展(不需要另一个答案),它是一个RPC堆栈,而不是远程处理堆栈。如果需要属性,请从方法返回一个对象,并在客户端查看该对象的属性;这是SOAP+WSDL标准。他们所能描述的只是以消息形式发送的操作。这里甚至没有实例的概念,那么您将从中获得什么属性?+1。然而,观众们会被警告不要使用这种解释:“好吧,我想我会把我的属性改成Java风格的GetXxx+SetXxx方法对,这样做会更明智。”不,这是毫无意义的。排除了两种语法的性能问题后,可以自由地公开属性访问器。