2012-10-23 71 views
0
class MyCommonClass 
{ 
//properties 
} 

共享通用類此類應在在WCF項目

  1. 服務項目可訪問
  2. WCF的客戶端項目的其他他們所引用
  3. 。在這個通用項目中,我無法生成服務引用。

我想,我不能生成MyCommonClassServiceReferences但如何標記類是nonserializable?在屬性有IgnoreDataMemberAttribute。我試着也重用MyCommonClass型,設在共同的項目,但它仍然是產生

UPDATE

在不同的單詞:如果某些類型在ServiceOperation使用它會自動生成到WSDL文檔。如何禁用它? (我不希望它在wcf-client端)

回答

0

不清楚公共類是否需要部分WCF服務合約,以便它可以通過WSDL文檔提供給任何客戶端,或者如果您嘗試使公共類可以作爲標準.NET類訪問WCF服務和WCF客戶端。

在服務和客戶端之間共享標準.NET類的唯一原因是提供對共享邏輯的訪問。否則,只需將該類標記爲DataContractSerializable即可讓服務通過WSDL將該類公開給客戶端。請記住,其中一個four tenets of SOA是共享類型(WSDL)而不是類(.NET程序集)。

根據更新後的問題,您可以通過強制WCF使用XmlSerializer而不是默認的DataContractSerializer來更好地控制WCF串行化爲soap XML的內容。此外,您可能想要將域模型對象與WCF服務公開的對象分開,如this SO question and answers中所述。此excellent blog post解釋了兩個序列化程序之間的差異以及如何強制WCF使用XmlSerializer

+0

MyCommonClass用於某些抽象類等,不受wsdl文檔支持(抽象類是在標準類中的wsdl中生成的)。此外,這些抽象類及其派生類不在ServiceOperation方法中使用,因此它們不能在wsdl文檔中生成,但標記爲OperationContract – Saint

+0

WCF是基於消息的客戶機/服務體系結構的抽象。它不是作爲分佈式面向對象的框架設計的,這就是爲什麼抽象類型不被真正支持。您嘗試的方法在WCF中得不到支持。將WCF想象成基於XML的消息傳遞(soap)交換模式的面向對象抽象。您正嘗試通過XML消息交換模式推動面向對象的抽象。 –

+0

你不明白。我知道。我不會推動wcf的抽象結構。我需要在共同項目中共享一些類,並且我不想將此類型序列化爲wsdl文檔。我正在尋找這樣的屬性或其他方式 – Saint