2011-04-11 61 views
4

我正在實施.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接口的具體類(及其方法)的屬性?我是否應該在這兩個地方應用相同的屬性,或者只應用其中一個地方,爲什麼?謝謝。

回答

0

您只需要將服務屬性應用到接口。 WCF使用該接口並僅使用接口來定義API - 該實現始終實現所有接口成員,因此不需要該屬性。具體實現上的屬性將被忽略。

+3

根據msdn http://msdn.microsoft.com/en-us/library/system.servicemodel.servicecontractattribute.aspx 服務屬性可以應用於刪除一個接口或直接到一個類。 這裏的問題是相對於另一個的優缺點 例如,如果您的服務暴露多個合同,您必須將該屬性添加到每個接口以允許實施多個合同 – 2012-03-26 20:06:08

+0

您無法應用ServiceBehavior屬性到接口,它只在類聲明時有效,按照.net 4.5 – Oscar 2016-12-16 08:06:12

相關問題