2014-02-14 60 views
3

我需要訪問基於Java的服務,該服務在與其導入的某個模式文件所使用的同一名稱空間中定義portType元素。不幸的是,該模式包括與portType同名的complexType重命名服務部分參考

的問題是,「添加服務引用」使用portType的名稱來創建服務合同的名稱,並創建與complexType的名稱class - 它在同一個命名空間.NET創建它們。這不行!

在「添加服務引用」對話框中或在.svcmap文件中,是否可以執行「重命名」服務合同類型?


密切相關的一個問題是 - 有什麼我可以做這個,如果portTypecomplexType處於不同的命名空間(如,恕我直言,他們應該)?

回答

-1

在Visual Studio中,您可以在解決方案資源管理器中選擇您的項目,並在頂部有一小組圖標。從右邊的鼠標懸停在上面,你會發現一個名爲「顯示所有文件」。這將顯示隱藏的文件,例如由服務引用創建的類(現在您應該有箭頭來展開它)。

您可以完全控制這些類。你可以重命名它們,把它們放在不同的命名空間中,等等。

+0

你並不完全控制這些類。下次您執行「更新服務參考」時,它們將被覆蓋。編輯生成的代碼幾乎總是一個壞主意。 –

1

你可以編輯生成的類,就像dustinmorris所建議的那樣。但是,如果您需要更新服務引用,則會產生問題,因爲它會重新生成這些類。

更好的辦法是將它們分成兩個不同的命名空間,如你所建議的,這是行得通的。

最好的解決方案可能是修復java服務,如果可能的話,給兩個衝突的項目賦予更多有意義的名稱,這樣服務更容易理解。

3

不幸的是,我認爲很簡單的答案是「不」。

試圖說服Java服務的維護者去除他們的界面中的歧義甚至是遠程可能的嗎?如果是的話,我建議竭盡全力地遊說這一變化,因爲你的選擇,其餘都不是很大的:

可以嘗試使用在.svcmap文件ExcludedTypes元素強制服務引用不會生成與portType衝突的complexType。如果你真的需要使用complexType,你需要手動實現它,這是一個令人失望的。

可能手動編輯Reference.cs文件以更改其中一個衝突類型的名稱,如其他人所建議的那樣。但是,每次維護代碼的每個人都需要記住在每次重新生成服務引用時執行此手動編輯,這是一件令人失望的事情。

可能發揮與在.svcmap文件NamespaceMappings元素,但只允許你重命名一個完整的命名空間,該命名空間中不是個別的類型,這是一個令人失望。

可以手動創建的服務合同的接口(假設這是從portType生成的類型),然後使用ServiceContractMappings元件在.svcmap文件中使用這種類型的,而不是自動生成它。但是,當然你必須手動維護這個接口,這是一個無賴。 (這可能是最好的選擇,IMO,如果你無法說服服務維護者改變他們的服務)。