使用XmlSerializer时内部SecurityException

时间:2013-05-17 10:00:11

标签: asp.net web-services sharepoint serialization

在创建自定义Sharepoint Web服务时,我在尝试序列化类进行传输时收到错误。

我的可序列化类没有错误。它们以我以前使用过的方式构建,并且可以在本地测试环境中成功序列化,只有在部署了Sharepoint Web服务时才会出现此问题。

System.InvalidOperationException was caught
  Message=There was an error generating the XML document.
  Source=System.Xml
  StackTrace:
       at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
       at System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces)
       at SPServiceExtensions.DTOSerializerHelper.SerializeDTO(SharepointDTO dto)
  InnerException: System.Security.SecurityException
       Message=Request failed.
       Source=xo46jp-i
       StackTrace:
            at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterSharepointDTO.Write4_SharepointDTO(String n, String ns, SharepointDTO o, Boolean isNullable, Boolean needType)
            at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterSharepointDTO.Write5_SharepointDTO(Object o)
       InnerException: 

内部的SecurityException不熟悉。造成这种例外的原因是什么?

1 个答案:

答案 0 :(得分:0)

ASP.NET使用different trust levels作为其安全策略。这样,应用程序就无法访问其他不相关应用程序中的数据。

Microsoft Sharepoint拥有自己的two additional code access levels,默认情况下在 WSS_Minimal上运行。

由于Web服务作为Sharepoint服务器上的本地应用程序运行,因此需要完全信任

然而,微软不鼓励无奈地应用完全信任。我认为它可能允许其他应用程序调用您的代码,这些代码有可能被恶意利用来利用系统。

因此,防止SecurityException的更好方法是修改项目AssemblyInfo.cs并将此属性添加到[assembly:AllowPartiallyTrustedCallers]

Microsoft's article on Code Access Security