2011-03-04 24 views
1

我遇到問題,因爲我正在使用LdapConnection針對AD LDS(以前稱爲ADAM)數據存儲區發出請求。精細。但現在需求已經出現,能夠「遠程」執行此操作。基本上,我們可以依賴的程序總是可以訪問數據存儲區,現在需要通過「內部」網絡上的「服務器」程序來完成,因此外部程序的「客戶端」只能通過我們新的「服務器」程序。有一個原因(不是很好的理由,但是一個原因),爲什麼我們不能只將AD LDS服務器暴露給外部。但他們希望「快速」完成,因此不想重新設計客戶端應用程序(應該是真正發生的事情)。因此,我們需要序列化DataRequestDataResponse以進出「服務器」部分。序列化來自LdapConnection的.NET類型

大問題:DataResponses似乎不是可序列化的。在測試過程中,一個DataContractSerializer的有沒有問題我的序列化,但SearchRequestSearchResponse得到這個:

System.Runtime.Serialization.InvalidDataContractException occurred 
    Message="Type 'System.DirectoryServices.Protocols.SearchResponse' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. See the Microsoft .NET Framework documentation for other supported types." 
    Source="System.Runtime.Serialization" 
    StackTrace: 
     at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.ThrowInvalidDataContractException(String message, Type type) 
    InnerException: 

確定。但這兩種類型都沒有Serializable或哪些不是。那麼爲什麼SearchRequest經過這個過程並且響應不是?

但這到底甚至沒有關係。我該如何序列化一個我無法改變的類型,因爲它內置於.NET框架中,而且我不能「重新制作」,因爲構造函數是內部的?如果我可以只是「獲取我需要的信息」,並在我的網絡連接的另一端重新創建班級,我會這樣做,但這些類型沒有公共構造函數。

任何想法?我甚至想知道爲什麼其中一種類型「正常工作」,即使沒有DataContractSerializer的正確屬性,但另一種類型沒有。

回答

2

最好的 - 也許只有 - 方法是創建自己的包裝類,然後讀取結果並存儲在類和序列化中。

SearchResponse實際上是一個COM包裝並且不能被序列化。

+0

不幸的是,這是不行的,因爲現有的代碼需要一個'DirectoryResponse'及其實際的子類。不,該代碼也不能改變。我在一個相當大的框架下工作,因此受到它的限制。 –

+0

我必須做到這一點,並觸及我們框架中的十幾個類。不是我想要做的,但想要相信你,這基本上是發生了什麼。 –

+0

謝謝。我已經提出了你的問題。 – Aliostad

相關問題