我正在使用IOrganizationService无法修改的预定义对象——它超出了我的控制范围。
并且默认情况下,这似乎IOrganizationService返回已解析的类型,就好像EnableProxyTypes()在 originating 某处被隐式调用一样OrganizationServiceProxy。
这会破坏所有业务逻辑,因为早期绑定的实体不能那么容易地序列化,因为在不同的安装上它们可以解析为不同的类型。因此,即使它们被成功序列化,也不能 100% 确定它们可以被反序列化。
更具体地说,它是XrmToolBox. 如果托管应用程序加载的插件使用早期边界,这些生成的类型将通过反射发现并应用于结果Retrieve和RetrieveMultiple调用。
例如RetrieveMultiple,account实体响应通常包含Entity[],该数组的每个项目都将LogicalName属性设置为account。
但是如果在汇编中发现了早期的绑定类型,我们称之为EarlyBouldLibrary.dll,同样RetrieveMultiple会返回EarlyBouldLibrary.Account[]。该数组的每个项目都将派生自Entity并包含与第一个示例相同的字段,但具有附加属性。
问题在于以下。如果我们尝试序列化EarlyBouldLibrary.Account[]它XML将会失败。因为EarlyBouldLibrary.Account未知。
好的,可以将类型添加到已知。但是不能保证,有一天会在NewEarlyBouldLibrary.dll...中找到另一种早期绑定类型,并且它们将具有名称NewEarlyBouldLibrary.Account...这是未知的...
好的,让我们假设序列化成功,无论引用哪种类型EarlyBouldLibrary.Account,NewEarlyBouldLibrary.Account但是如果我们尝试反序列化,在这些早期绑定库不存在的环境中......操作将失败。
因此,唯一的方法是不使用我们无法控制的特定早期绑定类型,并使用标准和安全Entity。但是系统自动解析代理类型是不可能的。
所以,问题:有没有办法禁用早期绑定类型的解析?