客户端在定阅接口中事件的时候,第一次会报身份验证失败错误,第二次报远程主机强迫关闭一个现有连接错误,请高手指点
附代码
接口public delegate void ForGPRSGatewayDecodeDataHandLer(HLGpsClass.GpsDataArgs e,object sender); public interface IGpsRemote
{
event ForGPRSGatewayDecodeDataHandLer OnForGPRSGatewayDecodeDataHandLerEvent; void SendGPRSGatewayDecodeData(HLGpsClass.GpsDataArgs gpsDataArgs);
}
工厂public event ForGPRSGatewayDecodeDataHandLer LocalForGPRSGatewayDecodeDataHandLerEvent; public void ForServerBroadCasting(HLGpsClass.GpsDataArgs gpsDataArgs,object sender)
{
this.LocalForGPRSGatewayDecodeDataHandLerEvent(gpsDataArgs, sender);
} /// <summary>
/// 表示远程对象无期限租用
/// </summary>
/// <returns></returns>
public override object InitializeLifetimeService()
{
return null;
}
远程对象public event ForGPRSGatewayDecodeDataHandLer OnForGPRSGatewayDecodeDataHandLerEvent; public void SendGPRSGatewayDecodeData(HLGpsClass.GpsDataArgs gpsDataArgs)
{
if (OnForGPRSGatewayDecodeDataHandLerEvent != null)
{
ForGPRSGatewayDecodeDataHandLer tempEvent = null;
foreach (Delegate del in OnForGPRSGatewayDecodeDataHandLerEvent.GetInvocationList())
{
try
{
tempEvent = (ForGPRSGatewayDecodeDataHandLer)del;
tempEvent(gpsDataArgs, this);
}
catch
{
OnForGPRSGatewayDecodeDataHandLerEvent -= tempEvent;
}
}
}
}
服务器public GPSRemoteObject.GpsRemote gpsRemoteObject = null; private void Form1_Load(object sender, EventArgs e)
{
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider(); serverProvider.TypeFilterLevel = TypeFilterLevel.Full; IDictionary props = new Hashtable(); props["port"] = 8081;
TcpChannel tcpChannel = new TcpChannel(props, clientProvider, serverProvider); gpsRemoteObject = new GPSRemoteObject.GpsRemote(); ObjRef objRef = RemotingServices.Marshal(gpsRemoteObject, "GPSServer.soap");
} private void button1_Click(object sender, EventArgs e)
{
HLGpsClass.GpsDataArgs gpsDataArgs = new HLGpsClass.GpsDataArgs(); gpsDataArgs.GprsId = this.txtSendMessage.Text;
this.gpsRemoteObject.SendGPRSGatewayDecodeData(gpsDataArgs); this.lstSend.Items.Add("己发送:GPRSID" + gpsDataArgs.GprsId);
}
客户端 Common.IGpsRemote iGpsRemote = null;
Common.EventWrapper eventWrapper = null;
private void Form1_Load(object sender, EventArgs e)
{
try
{
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full; IDictionary porps = new Hashtable();
porps["port"] = 0; TcpChannel tcpChannel = new TcpChannel(porps, clientProvider, serverProvider); ChannelServices.RegisterChannel(tcpChannel, true); this.iGpsRemote = (Common.IGpsRemote)Activator.GetObject(typeof(Common.IGpsRemote), "tcp://localhost:8081/GPSServer.soap"); eventWrapper = new Common.EventWrapper(); eventWrapper.LocalForGPRSGatewayDecodeDataHandLerEvent += new Common.ForGPRSGatewayDecodeDataHandLer(eventWrapper_LocalForGPRSGatewayDecodeDataHandLerEvent);
iGpsRemote.OnForGPRSGatewayDecodeDataHandLerEvent += new Common.ForGPRSGatewayDecodeDataHandLer(eventWrapper.ForServerBroadCasting);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void eventWrapper_LocalForGPRSGatewayDecodeDataHandLerEvent(HLGpsClass.GpsDataArgs e, object sender)
{
MessageBox.Show("工厂" + e.GprsId);
}
附代码
接口public delegate void ForGPRSGatewayDecodeDataHandLer(HLGpsClass.GpsDataArgs e,object sender); public interface IGpsRemote
{
event ForGPRSGatewayDecodeDataHandLer OnForGPRSGatewayDecodeDataHandLerEvent; void SendGPRSGatewayDecodeData(HLGpsClass.GpsDataArgs gpsDataArgs);
}
工厂public event ForGPRSGatewayDecodeDataHandLer LocalForGPRSGatewayDecodeDataHandLerEvent; public void ForServerBroadCasting(HLGpsClass.GpsDataArgs gpsDataArgs,object sender)
{
this.LocalForGPRSGatewayDecodeDataHandLerEvent(gpsDataArgs, sender);
} /// <summary>
/// 表示远程对象无期限租用
/// </summary>
/// <returns></returns>
public override object InitializeLifetimeService()
{
return null;
}
远程对象public event ForGPRSGatewayDecodeDataHandLer OnForGPRSGatewayDecodeDataHandLerEvent; public void SendGPRSGatewayDecodeData(HLGpsClass.GpsDataArgs gpsDataArgs)
{
if (OnForGPRSGatewayDecodeDataHandLerEvent != null)
{
ForGPRSGatewayDecodeDataHandLer tempEvent = null;
foreach (Delegate del in OnForGPRSGatewayDecodeDataHandLerEvent.GetInvocationList())
{
try
{
tempEvent = (ForGPRSGatewayDecodeDataHandLer)del;
tempEvent(gpsDataArgs, this);
}
catch
{
OnForGPRSGatewayDecodeDataHandLerEvent -= tempEvent;
}
}
}
}
服务器public GPSRemoteObject.GpsRemote gpsRemoteObject = null; private void Form1_Load(object sender, EventArgs e)
{
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider(); serverProvider.TypeFilterLevel = TypeFilterLevel.Full; IDictionary props = new Hashtable(); props["port"] = 8081;
TcpChannel tcpChannel = new TcpChannel(props, clientProvider, serverProvider); gpsRemoteObject = new GPSRemoteObject.GpsRemote(); ObjRef objRef = RemotingServices.Marshal(gpsRemoteObject, "GPSServer.soap");
} private void button1_Click(object sender, EventArgs e)
{
HLGpsClass.GpsDataArgs gpsDataArgs = new HLGpsClass.GpsDataArgs(); gpsDataArgs.GprsId = this.txtSendMessage.Text;
this.gpsRemoteObject.SendGPRSGatewayDecodeData(gpsDataArgs); this.lstSend.Items.Add("己发送:GPRSID" + gpsDataArgs.GprsId);
}
客户端 Common.IGpsRemote iGpsRemote = null;
Common.EventWrapper eventWrapper = null;
private void Form1_Load(object sender, EventArgs e)
{
try
{
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full; IDictionary porps = new Hashtable();
porps["port"] = 0; TcpChannel tcpChannel = new TcpChannel(porps, clientProvider, serverProvider); ChannelServices.RegisterChannel(tcpChannel, true); this.iGpsRemote = (Common.IGpsRemote)Activator.GetObject(typeof(Common.IGpsRemote), "tcp://localhost:8081/GPSServer.soap"); eventWrapper = new Common.EventWrapper(); eventWrapper.LocalForGPRSGatewayDecodeDataHandLerEvent += new Common.ForGPRSGatewayDecodeDataHandLer(eventWrapper_LocalForGPRSGatewayDecodeDataHandLerEvent);
iGpsRemote.OnForGPRSGatewayDecodeDataHandLerEvent += new Common.ForGPRSGatewayDecodeDataHandLer(eventWrapper.ForServerBroadCasting);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void eventWrapper_LocalForGPRSGatewayDecodeDataHandLerEvent(HLGpsClass.GpsDataArgs e, object sender)
{
MessageBox.Show("工厂" + e.GprsId);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货