我遇到的问题是我正在使用LdapConnection向AD LDS(以前称为ADAM)数据存储区发出请求。精细。但现在已经出现了能够“远程”执行此操作的要求。基本上,我们可以依赖的程序总是可以访问数据存储区,现在需要通过“内部”网络上的“服务器”程序来完成,这样外部网络上的“客户端”只能通过我们新的“服务器”进行通信。程序。有一个原因(不是一个伟大的原因,但一个原因)为什么我们不能只将AD LDS服务器暴露给外部。但他们希望它“快速”完成,因此不想重新设计客户端应用程序(应该是真正发生的事情)。因此,我们需要序列化DataRequest
和DataResponse
以进出“服务器”部分。
大问题:DataResponses似乎不可序列化。在测试期间,DataContractSerializer序列化我的SearchRequest
没有问题,但SearchResponse
得到了这个:
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
的正确属性,但另一种则没有。
答案 0 :(得分:2)
最好 - 也可能是唯一 - 的方法是创建自己的包装类,然后读取结果并存储在类和序列中。
SearchResponse
实际上是一个COM包装器,无法序列化。