我几乎没有使用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,有什么帮助吗?
答案 0 :(得分:0)
Pah - 应该猜测在堆栈交换发布后5分钟我会找到它。我只需要替换:
<formatter ref="soap" />
通过
<formatter ref="soap" typeFilterLevel="Full" />
typeFilterLevel的MSDN文档解释了发生了什么,虽然我不完全确定为什么数组不被视为“基本”类型