我有一些在整個系統上使用的現有接口。在現有接口上應用ServiceContract和OperationContract
現在我想用其中一個接口作爲服務合同。
但問題是我需要在現有接口上添加[ServiceContract]
和[OperationContract]
屬性,並且它們會污染其餘的代碼。
解決這個問題的任何解決方案都無法複製接口?
在具體實現上應用屬性?這是一個很好的做法嗎?
謝謝
我有一些在整個系統上使用的現有接口。在現有接口上應用ServiceContract和OperationContract
現在我想用其中一個接口作爲服務合同。
但問題是我需要在現有接口上添加[ServiceContract]
和[OperationContract]
屬性,並且它們會污染其餘的代碼。
解決這個問題的任何解決方案都無法複製接口?
在具體實現上應用屬性?這是一個很好的做法嗎?
謝謝
你可以簡單地擴展了服務warpper類型接口的接口,即:
public interface IMyCode
{
string GetResult();
}
[ServiceContract]
public interface IMyCodeService : IMyCode
{
[OperationContract]
string GetResult();
}
C#允許接口繼承,編譯器會吐出一個警告,IMyCodeService.GetResult
需要新的,因爲它隱藏了IMyCode.GetResult
方法,但不追加new
不會打破的執行情況,作爲一個例子:
class Program
{
static void Main(string[] args)
{
MyCodeService service = new MyCodeService();
IMyCodeService serviceContract = (IMyCodeService)service;
IMyCode codeContract = (IMyCode)service;
service.GetResult();
serviceContract.GetResult();
codeContract.GetResult();
Console.ReadKey();
}
}
public interface IMyCode
{
void GetResult();
}
public interface IMyCodeService : IMyCode
{
void GetResult();
}
public class MyCodeService : IMyCodeService
{
public void GetResult()
{
Console.Write("I am here");
}
}
這樣的話,你可以提供基於現有的接口不改變服務合同您現有的代碼。
如果您分享您的合約程序集,而不是使用WCF爲您生成代理,那麼甚至可以在您接受現有接口的地方傳遞服務合約,因爲服務接口將繼承它。
我們正在慢慢地嘗試移動到WCF並得到同樣的問題。除了裝飾具有屬性的服務接口外,我們無法找到另一種方式。他們是屬性,所以希望不應該污染代碼太多。
一兩件事我們必須做的(運動形式遺留的Web服務時,是要確保所有相關性轉移到共同的地方,使他們能夠從雙方和Global.aspx WCF主機服務調用)
你必須在具體實現(主要是ServiceBehavior相關屬性)上實現屬性,以便WCF主機可以託管它。至於OperationContract,我們主要應用於接口。
不應該爲每個'[OperationContract]'的繼承接口添加一個'new'關鍵字? –