这是使用sink provider的代码,如果用BinaryServerFormatterSinkProvider 就没问题,如果用自定义的provider,当在服务器端访问一个文件的时候报异常。System.Security.SecurityException occurred
  Message="Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed."
  Source="mscorlib"
  StackTrace:
       at System.Security.FrameSecurityDescriptor.CheckDemand2(CodeAccessPermission demand, PermissionToken permToken, RuntimeMethodHandle rmh, Boolean fDeclarative)
  InnerException:             //BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
            //provider.TypeFilterLevel = TypeFilterLevel.Full;            InspectionServerSinkProvider provider = new InspectionServerSinkProvider();
            provider.Next = new BinaryServerFormatterSinkProvider();
下面是自定义的sink的代码:public class InspectionServerSinkProvider : IServerChannelSinkProvider, IServerFormatterSinkProvider
    {
        private IServerChannelSinkProvider next;        /// <summary>
        /// Initializes a new instance with default parameters.
        /// </summary>
        public InspectionServerSinkProvider()
        {
        }        public void GetChannelData(IChannelDataStore channelData)
        {
            if (next != null)
            {
                next.GetChannelData(channelData);
            }
        }        public IServerChannelSink CreateSink(IChannelReceiver channel)
        {
            IServerChannelSink sink = null;            if (next != null)
            {
                IServerChannelSink nextSink = next.CreateSink(channel);
                sink = new InspectionServerSink(nextSink);
            }            return sink;
        }        public IServerChannelSinkProvider Next
        {
            get { return next; }
            set { next = value; }
        }
    }public class InspectionServerSink : BaseChannelObjectWithProperties, IServerChannelSink, IChannelSinkBase
    {
        private IServerChannelSink next;
        private IPAddress firstTimeIP;        public InspectionServerSink(IServerChannelSink next)
        {
            this.next = next;
        }        public void AsyncProcessResponse(IServerResponseChannelSinkStack sinkStack, Object state, IMessage msg, 
            ITransportHeaders headers, Stream stream)
        {
        }
        public Stream GetResponseStream(IServerResponseChannelSinkStack sinkStack, Object state, IMessage msg, 
            ITransportHeaders headers)
        {
            return null;
        }        public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, 
            IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, 
            out ITransportHeaders responseHeaders, out Stream responseStream)
        {
            IPAddress ip = requestHeaders[CommonTransportKeys.IPAddress] as IPAddress;
            long connectionId = (long)requestHeaders[CommonTransportKeys.ConnectionId];
            Console.WriteLine(ip.ToString());            result = next.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);            return result;
        }        public IServerChannelSink NextChannelSink
        {
            get { return next; }
            set { next = value; }
        }    }