public void ToChannelMethodInvoke(byte[] data, ServiceChannelManager channelManager, out ServiceChannel channel, out int methodIndex, out object[] args)
        {
            BinaryDataReader reader = new BinaryDataReader(data);

            channel = channelManager[reader.ReadString()];
            if (channel == null)
            {
                methodIndex = -1;
                args        = null;
                return;
            }
            methodIndex = reader.ReadInt32();
            if (methodIndex < 0 || methodIndex >= channel.Provider.ServerOperations.Count)
            {
                methodIndex = -1;
                args        = null;
                return;
            }
            var method    = channel.Provider.ServerOperations[methodIndex];
            var parameter = method.GetParameters();

            args = new object[reader.ReadByte()];
            for (int i = 0; i < args.Length; i++)
            {
                args[i] = Formatter.Deserialize(parameter[i].ParameterType, reader.ReadBytes());
            }
        }
 public ServiceHost(ServiceBinding binding)
 {
     Binding = binding;
     Server  = new Server((ushort)binding.MainPort);
     Server.PreviewAccept   += PreviewAccept;
     Server.AcceptCompleted += Accept;
     ChannelManager          = new ServiceChannelManager();
     SetDataFormatter(new DataFormatter());
     Unity           = new ServiceUnity();
     InstanceManager = new HostInstanceManager(Unity);
     IOManager       = new MessageIOManager();
 }