2015-08-26 36 views
0

我在使用WCF中的命名空間時遇到問題。我從來沒有這樣做過。我已經嘗試了很多在google上找到解決方案。但我仍然無法找到解決方案。從WSDL中刪除額外的WCF命名空間

我已經寫了這是在3個項目分成,另外我創建了一個模型項目WCF服務:

  1. 合同(的ServiceContract)
  2. 服務(代碼隱藏)
  3. 主機(ServiceHost的)
  4. Models(DataContract classes)

當我在IIS中託管服務時,它正在生成WSDL不錯,但還有許多事情沒有下文定義的命名空間:

http://schemas.microsoft.com/2003/10/Serialization/ 
http://schemas.datacontract.org/2004/07/My.Models 

的問題是,我想訪問只通過同一個命名空間我所有的服務合同和數據的合同。

因爲當在代理類中生成DataContract類時,它將被複制。意思是說,如果我的Models項目中有ClassA類別,那麼它會給我2班,分別爲ClassAClassA1

我看到在代理類中,它們存在於不同的命名空間中。所以,我想避免這種情況。

我也想避免ChannelFactory方法,因爲有很多OperationContract函數。所以,不想用手編寫這些代碼,但希望它能以正確的方式自動生成。

任何幫助,非常感謝。提前致謝。

+1

我不明白你對'ChannelFactory'方法的意思,並有很多手工編碼。 'ChannelFactory'將爲您生成代理 - 在創建工廠之外沒有任何東西需要手工編寫,並從中獲取通道。 – Tim

+0

是的 - 您的服務器端服務對象和客戶端代理生成的對象的名稱空間通常*是*不同的 - **除非您知道您控制服務調用的兩端(服務器+客戶端) ,並且您可以將數據合約放入由服務器和客戶端引用的*獨立程序集*中。在這種情況下,數據合約程序集中的數據類只存在一次**。 –

+0

您是否爲您的合同/服務定義了名稱空間? –

回答

0

我也想避開ChannelFactory方法,因爲有很多 OperationContract函數。所以,不想用 來代碼,但希望它能以正確的方式自動生成。

這沒有任何意義。 ChannelFactory<T>.CreateInstance()方法比wsdl生成的服務代理輕得多,而且您必須編寫的代碼量是可比的。

服務參考是專爲當你打電話給你無法控制的第三方服務或內部可視性而設計的。

我可以想到,如果您有權訪問服務定義程序集,那麼使用生成的服務引用優於使用ChannelFactory。

對於您爲了控制客戶端代碼生成而操縱服務wsdl的需求,尤其如此。