【问题标题】:Should I apply service attributes to the interface, to the concrete class, or to both?我应该将服务属性应用于接口、具体类还是两者?
【发布时间】:2011-04-11 16:45:18
【问题描述】:

我正在实现一个 .Net WCF 服务,并且我想为未来的版本控制应用一个命名空间。一位同事提到我应该对接口和该接口的具体实现类应用几个属性,但我不清楚 1)这是否正确,以及 2)假设它是正确,为什么在两个地方都应用属性很重要。

[ServiceContract]
[ServiceBehavior(Namespace = Constants.NameSpace1_0)]
[WebService(Namespace = Constants.NameSpace1_0, Name = "MyService1_0")]
[WebServiceBindingAttribute(ConformsTo = System.Web.Services.WsiProfiles.BasicProfile1_1, EmitConformanceClaims = true)]
public interface IMyService
{
    [OperationContract]
    [OperationContract(Name = "MyMethod", Action = Constants.NameSpace1_0 + "/IMyService/MyMethod")]  
    string MyMethod(string phrase);
}

public class MyServiceConcrete : IMyService
{
    public string MyMethod(string phrase);
}

在这个例子中,我是否也应该将应用于接口的属性应用于实现 MyService 接口的具体类(及其方法)?我应该在两个地方还是只在其中一个地方应用相同的属性,为什么?谢谢。

【问题讨论】:

    标签: .net interface attributes wcf


    【解决方案1】:

    您只需要将服务属性应用到接口。 WCF 使用接口,并且只有接口来定义 API - 实现总是实现所有接口成员,因此那里不需要属性。具体实现的属性将被忽略。

    【讨论】:

    • 根据 msdn msdn.microsoft.com/en-us/library/…,服务属性可以应用于接口或直接应用于类。这里的问题是一个相对于另一个的优缺点,例如,如果您的服务公开多个合同,您必须将属性添加到每个接口以允许实施多个合同
    • 您不能将 ServiceBehavior 属性应用于接口,它仅在类声明中有效,根据 .net 4.5
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2016-03-22
    • 2011-11-12
    相关资源
    最近更新 更多