我想將WCF合同接口移至第三個DLL,並在手動生成代理時從客戶端開始使用它們。將WCF合同移至單獨的DLL
當我從客戶端使用它們來生成代理時,DLL中的那些接口是否必須具有[ServiceContract]
屬性?
任何想法什麼是最好的命名爲Dll將只有合同和DTOs在客戶端和服務器之間共享。
我想將WCF合同接口移至第三個DLL,並在手動生成代理時從客戶端開始使用它們。將WCF合同移至單獨的DLL
當我從客戶端使用它們來生成代理時,DLL中的那些接口是否必須具有[ServiceContract]
屬性?
任何想法什麼是最好的命名爲Dll將只有合同和DTOs在客戶端和服務器之間共享。
將WCF數據和服務契約分開組裝是非常普遍的做法。在我之前的項目中,我們使用的名字如Company.OurProject.Contracts.dll
。 我認爲要重新使用現有類來生成代理,您應該將用於服務合同(標記爲[ServiceContractAttribute]
)的接口和相應的數據合同放到該程序集中。我會避免把服務的實際實施。
這裏是SO與更深入地瞭解當選擇「中引用組件重用類型」什麼都可以重複使用另一個偉大的答案:WCF Service Reference generates its own contract interface, won't reuse mine
這是常見的,也許是推薦的方法。
是的,你應該把服務合約放在合同dll中的服務接口上。
請記住,名稱空間不必與dll的名稱相匹配。假設您的當前程序集類似CompanyName.Technology.Service.dll
,其命名空間類似於CompanyName.Technology.Service
,您應該將合同解壓縮到另一個程序集,但保持命名空間相同(假設它仍然有意義)並且程序集名稱爲CompanyName.Technology.Service.Contracts
。你不想擁有的是名稱爲「合約」的命名空間。
我使用* .ServiceContracts.dll,因爲我最終在我的系統中有多個合約程序集。例如DataContracts.dll用於訪問數據存儲。
另外,如果您共享您的二進制文件,我會避免生成的代理。我發現它是一個更清潔的WCF工作方式。您可以直接使用代理,而不是生成包裝代理的代碼。 –
你是什麼意思的「手動生成代理」?據我瞭解,你想通過重用現有程序集中的類來生成代理。是這樣嗎? –
@Andriy Buday是 –