我最近在研究Remoting事件处理,打算用客户端定阅客户端模式完成手头的项目,下载
http://www.cnblogs.com/Files/wayfarer/Remoting事件(服务端广播).rar
的代码,调试总不能通过,BroadCastEvent事件抛异常"无法连接到远程服务器".自写代码用TCP方式实现BroadCastEvent事件抛异常"由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。",我分析服务器端是正常工作的,问题出在定阅端注册的事件方法.不知道是什么原因造成的,我是在本机调试的.希望能给予指教.如果方便,希望在线指教,谢谢.
EMAIL and MSN:[email protected]

解决方案 »

  1.   

    你有事件就需要回调,那么就需要在客户端remoting设置中设置一个端口并进行相关设置,而且还要确保这一端口不被防火墙所禁止。欢迎大家来我的博客作客:http://blog.csdn.net/aafshzj/
    我正在写一系列关于AAF组件框架的文章。该框架能对开发工作提供很多帮助,并极大地提高开发效率。希望大家看一看并提出宝贵建议。
      

  2.   

    Remoting默认是不能用于支持回调的。三个东西要保证:BinaryClientFormatterSinkProvider
    BinaryServerFormatterSinkProvider
    System.Runtime.Serialization.Formatters.TypeFilterLevel.Full
      

  3.   

    谢谢上面的回复,按照你们的意思,我的clinet是注册了端口的,下面是我的配置文件
    <configuration>
      <system.runtime.remoting>
        <application>
          <client>
            <wellknown 
               type="DelegateObject.ServerObj, DelegateObject"
               url="tcp://localhost:9000/Obj.soap" />
          </client>
          <channels>
            <channel 
               ref="tcp" 
               port="0">
              <serverProviders>
                <provider ref="wsdl" />
                <formatter ref="soap" typeFilterLevel="Full" />
                <formatter ref="binary" typeFilterLevel="Full" />
              </serverProviders>
            </channel>
          </channels>
        </application>
      </system.runtime.remoting>
    </configuration>
      

  4.   

    http://www.cnblogs.com/Files/wayfarer/Remoting事件(服务端广播).rar
    这个Demo中EventWrapper对像既然继承了MarshalByRefObject,却没有在服务器端注册,这就意味着调用的时候声明的是客户端对像实例,这样的话MarshalByRefObject又有什么意义呢?如果是为了实现回调的时候实现远程调用,那么服务器端回调的时候又如果实现对客户端的定位呢?using System;
    using System.Runtime.Remoting.Messaging;namespace Wayfarer.BroadCast.Common
    {
    /// <summary>
    /// EventClass 的摘要说明。
    /// </summary>
    public class EventWrapper:MarshalByRefObject
    {
    public event BroadCastEventHandler LocalBroadCastEvent; //[OneWay]
    public void BroadCasting(string message)
    {
    LocalBroadCastEvent(message);
    } public override object InitializeLifetimeService()
    {
    return null;
    } }
    }