首页 新闻 会员 周边 捐助

TcpChannel 使用 写操作失败,请参见内部异常

0
悬赏园豆:100 [已解决问题] 解决于 2010-08-23 11:27

namespace ClassRef
{
    /// <summary>
    /// 代理
    /// </summary>
   public  class Proxy: MarshalByRefObject
   {
       public void SayHello(Consignor consignor)
       {
           Console.WriteLine("正在执行委托任务。。。");
           consignor.SayHello();
           Console.WriteLine("执行完成");
       }
        
    }
}

 

namespace ClassRef
{
    /// <summary>
    /// 委托人
    /// </summary>
    public class Consignor : MarshalByRefObject
    {
        public void SayHello()
        {
            Console.WriteLine("Hello");
        }
    }
}

 

namespace ServerForCode
{
    class Program
    {
        static void Main(string[] args)
        {
            //设置安全限制
            BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
            provider.TypeFilterLevel = TypeFilterLevel.Full;
            IDictionary props = new Hashtable();
            props["port"] = 8085;
            //注册信道
            TcpChannel chan = new TcpChannel(props, null, provider);
            ChannelServices.RegisterChannel(chan, true);

            //设置服务器提供的注册类型Proxy
            RemotingConfiguration.RegisterWellKnownServiceType(
    typeof(Proxy),
    "RemoteTestRef",
    WellKnownObjectMode.SingleCall);

            Console.WriteLine("Press <ENTER> to exit...");
            Console.ReadLine();
        }
    }
}

 

namespace ClientForCode
{
    class Program
    {
        static void Main(string[] args)
        {
            //注册信道
            TcpChannel chan = new TcpChannel(8087);
            ChannelServices.RegisterChannel(chan, true);

            //将Proxy注册为可在服务器激活的类型
            RemotingConfiguration.RegisterWellKnownClientType(typeof(Proxy), "tcp://localhost:8085/RemoteTestRef");

            //声明服务器对象
            Proxy proxy = new Proxy();

            //声明以引用方式传到服务器的对象
            Consignor consignor = new Consignor();

            proxy.SayHello(consignor);

            Console.WriteLine("Press <ENTER> to exit...");
            Console.ReadLine();

        }
    }
}

求助,客服端这边运行总是一次成功,一次失败的。异常信息是“写操作失败,请参见内部异常。”。是哪里代码写错了。

问题补充: 我是让Server 这边一直开启着不关闭,Client这边开了一次,关了再开第二次就有错误。总之,就是一次错误一次不错误。
pc人生的主页 pc人生 | 初学一级 | 园豆:2
提问于:2010-08-21 14:21
< >
分享
最佳答案
0
将你的代码做了下整理分成三个程序集,Client ,Server ,Contract 三部分,再把解决方案设置成多启动项目,运行了几次,没出现问题, 不知道你是怎么架设项目的。主要有两点、服务器端要确保启动、端口可用、通信完后要关闭连接。

收获园豆:100
HUHU慈悲 | 大侠五级 |园豆:9973 | 2010-08-21 14:59
你连接关闭了没 ?
HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-08-21 21:08
其他回答(1)
0

你的客户端没有关闭TcpChannel吗?

把你的客户端异常的StackTrace贴出来。

Launcher | 园豆:45050 (高人七级) | 2010-08-21 17:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册