熟悉.Net Remoting的高手入

Jackforid2003 2006-09-01 09:49:29
想问一下,.Net Remoting里面的远程事件。
有没有在internet上成功试验的例子?
...全文
1095 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
quexiangcheng 2007-01-24
  • 打赏
  • 举报
回复
hehe... 是防火墙的问题。如果你的remoting不是部署在具有公网ip的机器上, 配制文件上要加 machinename=“你防火墙的ip”,这样一个接点。
iraqtutu 2006-12-23
  • 打赏
  • 举报
回复
去博客堂看看大坏蛋的帖子吧
cxb_hy 2006-12-20
  • 打赏
  • 举报
回复
mark
chenyunfan 2006-12-20
  • 打赏
  • 举报
回复
mark
njdxbzu 2006-12-20
  • 打赏
  • 举报
回复
这里能给你答案
http://blog.csdn.net/njdxbzu/archive/2006/12/20/1450369.aspx
nextsun 2006-12-16
  • 打赏
  • 举报
回复
还没有接触过,UP~~
njdxbzu 2006-12-15
  • 打赏
  • 举报
回复
服务端口和回调端口是同一个吗?
xingdongfang 2006-11-11
  • 打赏
  • 举报
回复
建议楼主尝试一下FRAMEWORK3.0下面的WCF。
zhxfzhxf1 2006-11-08
  • 打赏
  • 举报
回复
up
aafshzj 2006-09-18
  • 打赏
  • 举报
回复
internet理论上也可以。关键在于你要确保网络设备和机器开放了相关服务端口和回调端口(如果存在回调的话)。

希望对你有所帮助。

欢迎大家来我的博客作客:http://blog.csdn.net/aafshzj/
我正在写一系列关于AAF组件框架的文章。该框架能对开发工作提供很多帮助,并极大地提高开发效率。希望大家提出宝贵建议。
LANTE80 2006-09-18
  • 打赏
  • 举报
回复
mark 顶起来
Jackforid2003 2006-09-17
  • 打赏
  • 举报
回复
to drk928(一起看斜阳) :
你这个在internet上试过吗?我看了还是老样子,局域网可以,internet不行
Jackforid2003 2006-09-13
  • 打赏
  • 举报
回复
晕,使自己犯了点小错误。。回家看看internet上的效果:-)
Jackforid2003 2006-09-13
  • 打赏
  • 举报
回复
仔细看了一下楼上的代码也调试了一下,receiver那段代码不能正确运行,服务器端事件的响应需要一个中间事件重现器的吧
Jackforid2003 2006-09-12
  • 打赏
  • 举报
回复
楼上的能不能顺便把几个config文件帖一下?
LVOLCANO 2006-09-12
  • 打赏
  • 举报
回复
mark
SeeSunSet 2006-09-12
  • 打赏
  • 举报
回复
server.config

<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown mode="Singleton" type="ChatRoom,ChatRoom" objectUri="ChatRoomURL" />
</service>
<channels>
<channel ref="http" port="8080">
<serverProviders>
<provider ref="wsdl" />
<formatter ref="soap" typeFilterLevel="Full" />
<formatter ref="binary" typeFilterLevel="Full" />
</serverProviders>
<clientProviders>
<formatter ref="binary" />
</clientProviders>

</channel>
</channels>
</application>
</system.runtime.remoting>
</configuration>

receiver.config

<configuration>
<system.runtime.remoting>
<application>
<client>
<wellknown type="ChatRoom,ChatRoom" url="http://cap35:8080/ChatRoomURL" />
</client>
<channels>
<channel ref="http" port="0" />
<serverProviders>
<provider ref="wsdl" />
<formatter ref="soap" typeFilterLevel="Full" />
<formatter ref="binary" typeFilterLevel="Full" />
</serverProviders>
<clientProviders>
<formatter ref="binary" />
</clientProviders>

</channels>
</application>
</system.runtime.remoting>
</configuration>

sender.config

<configuration>
<system.runtime.remoting>
<application>
<client>
<wellknown type="ChatRoom,ChatRoom" url="http://cap35:8080/ChatRoomURL" />
</client>
<channels>
<channel ref="http" port="0" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
Jackforid2003 2006-09-11
  • 打赏
  • 举报
回复
谢谢楼上的指点,关于建立通道的那段代码我只是省略了BinaryServerFormatterSinkProvider
我写的 TcpChannel chn = new TcpChannel(prop, null, Prv);

这会有什么影响吗?
SeeSunSet 2006-09-11
  • 打赏
  • 举报
回复
namespace Sender
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Sender
{
ChatRoom x;
public static void Main(string[] Args)
{
Sender y = new Sender();
y.Run();
}
string User;
public void Run()
{
Console.WriteLine("消息发送者 ... ,按Q键退出对话.");
// 以配置方式获取远程服务对象实例
// RemotingConfiguration.Configure("c.config");
// x = new ChatRoom();

//以编程方式获取远程服务对象实例
System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(new System.Runtime.Remoting.Channels.Http.HttpChannel());
x = (ChatRoom) System.Activator.GetObject(typeof(ChatRoom),"http://cap35:8080/ChatRoomURL");

//先登录
Console.WriteLine("输入登录用户名:");
User = Console.ReadLine();

//调用此远程方法,通知服务器触发 Receiver 客户端 Login 事件,广播 "登录" 消息
x.OnLogin(User);

Console.WriteLine("欢迎 " + User + ",输入发送的信息:");

string s; //存储键入的消息文字

while ((s=Console.ReadLine()) != "q") //如果键入 q 退出循环
{
//调用此远程方法,通知服务器触发 Receiver 客户端 MessageReceive 事件,广播你所键入的消息
x.OnMessageReceive(User + " 说: " + s);
}

//调用此远程方法,通知服务器触发 Receiver 客户端 Logoff 事件,广播 "退出" 消息
x.OnLogoff(User);
Console.WriteLine("拜拜" + User);
}


}
}



using System;
using System.Runtime.Remoting;


class Server
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
RemotingConfiguration.Configure("s.config");
Console.WriteLine("服务器运行中 .... 回车退出.");
Console.ReadLine();

}
}

SeeSunSet 2006-09-11
  • 打赏
  • 举报
回复
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection;
using System.Security.Permissions;

[Serializable]

public class ChatRoom:MarshalByRefObject
{
public ChatRoom()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

//定义了 1 个名为 "ChatRoomEventHandler 的事件处理委托" 及其参数格式签名
public delegate void ChatRoomEventHandler(string s);

//定义了 3 个 "ChatRoomEventHandler 委托类型" 的事件及远程回调函数/.
public event ChatRoomEventHandler MessageReceive; //消息接收事件
public event ChatRoomEventHandler Login; //登录事件
public event ChatRoomEventHandler Logoff; //退出事件

public void OnMessageReceive(string Message)
{
if (MessageReceive != null)
{
//触发 Receiver 客户端 MessageReceive 事件,广播所有消息
MessageReceive(Message);
}
Console.WriteLine("Server: " + Message); //服务器消息监视
}
public void OnLogin(string User)
{
if (Login != null)
{
//触发 Receiver 客户端 Login 事件,广播 "登录" 消息
Login("System say: " + User + " Login!");
}
Console.WriteLine("Server: " + User + " Login!");
}
public void OnLogoff(string User)
{
if (Logoff != null)
{
//触发 Receiver 客户端 Logoff 事件,广播 "退出" 消息
Logoff("System say: " + User + " Logoff!");
}
Console.WriteLine("Server: " + User + " Logoff!");
}
public override object InitializeLifetimeService()
{
return null;
}


}



using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection;
using System.Security.Permissions;
using System.Runtime.Remoting;

[Serializable]
class Receiver:MarshalByRefObject
{
//说明:一定要将这个EXE文件放一个在SERVER.EXE目录下,因为它也是SERVER的远程对象.
ChatRoom x;

public static void Main()
{
Receiver y = new Receiver();
y.Run();
}

public void Run()
{
RemotingConfiguration.Configure("c.config"); //相当于后期运行时绑定
x = new ChatRoom();
//向远程服务对象"注册"本地回调函数 this.Message_Receive1
x.MessageReceive += new ChatRoom.ChatRoomEventHandler(this.Message_Receive1);
//Login Logoff 与 MessageReceive 签名一样
x.Login += new ChatRoom.ChatRoomEventHandler(this.Message_Receive1);
x.Logoff += new ChatRoom.ChatRoomEventHandler(this.Message_Receive1);

Console.WriteLine("messages Receiver ... ,Press Enter key to exit.");

Console.ReadLine(); //退出关闭接收器

//千万不要忘记结束时取消委托关系
x.MessageReceive -= new ChatRoom.ChatRoomEventHandler(this.Message_Receive1);
x.Login -= new ChatRoom.ChatRoomEventHandler(this.Message_Receive1);
x.Logoff -= new ChatRoom.ChatRoomEventHandler(this.Message_Receive1);
}

//这个就是被服务器端远程回调的函数
public void Message_Receive1(string s)
{
Console.WriteLine(s);//在本地显示接收的广播消息
}

public override object InitializeLifetimeService()
{
return null;
}


}

加载更多回复(11)

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧