Web service可以用回调,
或者用.NET Remoting。
以下为转载:
样例:SOAP 受控代码事件
下列代码演示如何在两个应用程序之间引发受控代码事件。客户端有一个本地对象,注册为接收远程对象的事件通知。客户端呼叫服务器对象时,就引发事件,产生对客户端本地对象的回叫。
服务器端
zap.cs
using System;
namespace Zap
{
// 定义事件参数
public class GreetingEventArgs : EventArgs
{
public GreetingEventArgs(string greeting)
{
this.greeting = greeting;
}
public string greeting;
}
// 定义事件
public delegate void GreetingEvent(object sender,
GreetingEventArgs e);
// 定义服务
public class Waz : MarshalByRefObject
{
// 客户端将预定和取消预定此事件
public event GreetingEvent Greeting;
// 由客户端远程调用的方法
public void HelloMethod(string greeting)
{
Console.WriteLine("Received String {0}", greeting);
// 将字符串打包到 GreetingEventArgs 中
GreetingEventArgs e = new GreetingEventArgs(greeting);
// 引发事件
if (Greeting != null)
{
Greeting(this, e);
}
}
}
}
host.cs
using System;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels.HTTP;
public class Host
{
public static void Main(string[] args)
{
// 手动加载 http 通道。
// 这也可以在 Remoting 配置文件中完成。
ChannelServices.RegisterChannel(new HTTPChannel(999));
// 注册服务器类型。
// 这也可以在 Remoting 配置文件中完成。
RemotingServices.RegisterWellKnownType(
"Zap", // 程序集
"Zap.Waz", // 完整的类名
"host/Waz.soap", // URI
WellKnownObjectMode.Singleton); // 对象模式
// 完成操作,等候用户退出
Console.WriteLine("主机已经准备好处理远程消息。");
Console.WriteLine("请按 ENTER 键退出");
String keyState = Console.ReadLine();
}
}
客户端
client.cs
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels.HTTP;
using Zap;
// 将对象按引用本地封送到要引发的事件
public class Baz : MarshalByRefObject
{
public void GreetingHandler(object sender, GreetingEventArgs e)
{
Console.WriteLine("GreetingHandler 回叫: 问候: {0}\n",
e.greeting);
}
}
public class Client
{
public static void Main(String[] args)
{
Baz baz = new Baz();
// 这也可以在 Remoting 配置文件中完成。
// 注册 HTTP 通道
ChannelServices.RegisterChannel(new HTTPChannel(0));
// 获取 SOAP URL 代理
Waz waz = (Waz)Activator.GetObject(
typeof(Waz),
"http://localhost:999/host/Waz.soap"
);
// 预定事件: 通过 SOAP 进行
waz.Greeting += new GreetingEvent(baz.GreetingHandler);
for (int i = 0; i < 5; i++)
{
// 通过 SOAP 向 waz 发送
waz.HelloMethod("Bill" + " " + i);
}
// 取消预定事件: 通过 SOAP 进行
waz.Greeting -= new GreetingEvent(baz.GreetingHandler);
}
}
Makefile
makefile
all: Host.exe Zap.dll Client.exe
Host.exe: Host.cs
csc /r:System.Runtime.Remoting.dll Host.cs
Zap.dll: Zap.cs
csc /t:library -out:Zap.dll Zap.cs
Client.exe: Zap.dll Client.cs
csc /r:System.Runtime.Remoting.dll /r:Zap.dll Client.cs
在一个窗口中启动 host.exe 文件,然后在另一个窗口中启动 client.exe 文件。您将会看到事件被引发回到客户端。
这是诸多 .NET Remoting 应用程序中的一个小例子。.NET Remoting 提供了网络上的完全 CLR 受控代码类型系统,它还是优秀的 SOAP 服务器和客户端,因为它完全符合 SOAP 1.1 规范。
【 在 terrence (纳川) 的大作中提到: 】
: 如题,我现在正在研究这个问题,不知有没有志同道合之人。十分欢迎
: qq:14880229
: msn:ylchen0925@hotmail.com
: ...................
--
FROM 202.106.154.*