PermissionSet - 请求失败错误

时间:2014-02-19 17:46:10

标签: c# .net soap communication remoting

我几乎没有使用ChannelSink,ServerSink和ClientSink进行通信的项目。

我已将项目从.NET 2.0升级到.NET 4.0。升级之前一切正常。

现在,当我尝试进行通信时, - 对于特定的消息 - 我的OnReceiveMessage未被调用并抛出以下异常:

  

System.Security.SecurityException:请求失败

     

服务器堆栈跟踪:       在System.Array.InternalCreate(Void * elementType,Int32 rank,Int32 * pLengths,Int32 *

     

pLowerBounds)       在System.Array.CreateInstance(Type elementType,Int32 Length)       在System.Runtime.Serialization.Formatters.Soap.ObjectReader.ParseArray(ParseRecord)   PR)       在System.Runtime.Serialization.Formatters.Soap.ObjectReader.ParseObject(ParseRecord)   PR)       在System.Runtime.Serialization.Formatters.Soap.ObjectReader.Parse(ParseRecord   PR)   System.Runtime.Serialization.Formatters.Soap.SoapHandler.StartChildren()       在System.Runtime.Serialization.Formatters.Soap.SoapParser.ParseXML()   System.Runtime.Serialization.Formatters.Soap.ObjectReader.Run()   System.Runtime.Serialization.Formatters.Soap.ObjectReader.Deserialize(HeaderHandler,   ISerParser

     

serParser)   System.Runtime.Serialization.Formatters.Soap.SoapFormatter.Deserialize(流   serializationStream,

     

HeaderHandler处理程序)       在System.Runtime.Remoting.Channels.CoreChannel.DeserializeSoapRequestMessage(Stream

     

inputStream,Header [] h,Boolean bStrictBinding)       在System.Runtime.Remoting.Chanels.SoapServerFormatterSink.ProcessMessage

     

(IServerChannelSinkStack sinkStack,IMessage requestMsg,   ITransportHeaders requestHeaders,Stream

     

requestStream,IMessage& responseMsg,ITransportHeaders&   responseHeaders,Stream& responseStream)

     

在[0]处重新抛出异常:       在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage

     

retMSg)       在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&   msgData,Int32类型)       。       。 (我的一些文件)       。失败的操作是:Demand失败的第一个权限的类型是:System.Security.PermissionSet需求   是为了:

     

唯一允许的权限是:

     

导致失败的方法是:   System.Runtime.Remoting.Channels.ServerProcessing   ProcessMessage的(System.Runtime.Remoting.Channels.IServerChannelSinkStack,   System.Runtime.Remoting.Messaging.IMessage,   System.Runtime.Remoting.Channels.ITransportHeaders,System.IO.Stream,   System.Runtime.Remoting.Messaging.IMessage ByRef,   System.Runtime.Remoting.Channels.ITransportHeaders ByRef,   System.IO.Stream ByRef)

问题是,如果我创建一个虚拟方法并将其添加到sinkstack - 它会调用它。即使我使用相同的代理来拒绝该消息。

其他的事情是,其他消息正常工作。只有一种类型的消息不能用于创建的所有类型。

我根本没有在我的应用程序中请求PermissionSet,有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

Pah - 应该猜测在堆栈交换发布后5分钟我会找到它。我只需要替换:

<formatter ref="soap" />

通过

<formatter ref="soap" typeFilterLevel="Full" />

typeFilterLevel的MSDN文档解释了发生了什么,虽然我不完全确定为什么数组不被视为“基本”类型