2013-02-13 46 views
0

我有一個C#客戶端應用程序,我需要消耗了在暴露相同的功能(相同的名字,相同的參數和數據類型)外部webMethods的環境中舉辦了兩場SOAP Web服務,即選擇設計模式消耗SOAP Web服務在C#客戶端應用程序

Web服務1 - ManualLoadProduction

功能1 - LoadMontlyData(串月)

功能2 - LoadYearlyData(字符串年)

Web服務2 - ManualLoadCons umption

功能1 - LoadMontlyData(串月)

功能2 - LoadYearlyData(字符串年)

我在C#溶液兩者的Web服務的Web引用。我可以簡單地分別調用函數,但是,我需要構建分層解決方案。我應該如何設計/實施解決方案

+0

請具體談談「分層解決方案。」僅僅調用這些方法有什麼問題?另外,我希望你使用「添加服務引用」,而不是「添加Web引用」。這不應該用於新的發展。 – 2013-02-13 02:51:59

+1

另外,僅供參考,您錯誤地拼寫了您的用戶名。那將是「csharp_beginner」。兩個「n」。 – 2013-02-13 02:52:24

+0

如果你想有一個分層解決方案包裝在包裝類的方法,並且將實現您使用調用整個項目的其餘包裝方法的接口。 – 2013-02-13 03:01:01

回答

2

你有,你可以使用通過了你的應用程序的接口。這允許消費代碼依賴於合同而不是特定的實現。

public interface IServiceWrapper{ 

    Data LoadMontlyData(string Month); 
    Data LoadYearlyData(string Year); 
} 

這是ManualLoadProduction包裝器的一個實現。包裝服務方法允許您在服務調用周圍包裝其他功能,例如額外的驗證或對象映射。

public class ManualLoadProductionWrapper: IServiceWrapper{ 

     public Data LoadMontlyData(string Month){ 
     //implementation calls service method 
     } 

     public Data LoadYearlyData(string Year){ 
     //implementation calls service method 
     } 
} 

public class ManualLoadConsumption: IServiceWrapper{ 

     public Data LoadMontlyData(string Month){ 
     //implementation calls service method 
     } 

     public Data LoadYearlyData(string Year){ 
     //implementation calls service method 
     } 
} 
+0

也可以讓服務本身實現接口。自動生成的類聲明爲「partial」,只需添加另一個聲明來指定接口實現。 – 2013-02-13 12:46:08

+0

最好讓客戶端擁有自己的接口,使其與服務更加脫鉤。 – 2013-02-13 12:52:31

+0

當然,這就是我的意思,使自動生成的SOAP代理類實現客戶端的本地接口。 – 2013-02-13 13:23:19