您现在的位置是: 软件 > 开发者网络 > 技术跟踪 > XML与.NET专栏 > 正文


-Win xp中的多种网络
-试验试验试验试验
-用Freehand实现位图矢量化
-网络电话面面观

Microsoft .NET框架和Visual Studio.NET中的SOAP
2001-12-19· ·Keith Ballinger,Jonathan Hawkins,Pranish Kumar··microsoft

上一页  1 2 3 4 5  下一页


  样例: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 规范。

上一页  1 2 3 4 5  下一页

【责任编辑:  】
【发表评论】【关闭窗口】
■ 相关内容
 因特网COM服务
 微软Visual Studio .NET
 Microsoft .NET Remoting:技术概述
 Microsoft .NET Remoting:技术概述
 首个.NET操作系统病毒自首
 ADO.NET入门
 运用.NET读写Windows注册编辑表
 SOAP+Flash 更友好的Web应用程序
 Visual Studio.net中的XML注释
 用XMLTextReader类加速.NET中XML存取
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!