PHPRPC 3.0.1 for .NET 的新特征(支持 SilverLight 2.0)

SilverLight 2.0、异步调用和泛型支持是 PHPRPC 3.0.1 for .NET 中增加的新特征,下面我们通过一个小程序来演示一下这三个特征。首先 SilverLight 2.0 程序的建立我就不详细说明了,我用的是 Microsoft Expression Blend 2 + Microsoft Visual Web Developer 2008 Express Edition +Microsoft Silverlight 2 SDK。这个演示程序很简单,首先建立一个 SilverLight 2.0 程序,然后拖一个文本块和一个按钮到界面上,然后进入代码编辑区,下面是程序的主要代码:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using org.phprpc;
using org.phprpc.util;

namespace SilverlightPHPRPCExample
{
public interface ITest
{
void hi(string name, PHPRPC_Callback callback);
void hi(string name, PHPRPC_Callback<String> callback);
void array_sort(List<int> list, PHPRPC_Callback<List<int>> callback);
}
public partial class Page : UserControl
{
PHPRPC_Client client;
ITest it;
public Page()
{
InitializeComponent();
client = new PHPRPC_Client();
it = (ITest)client.UseService("http://localhost/server.php", typeof(ITest));
}
private void callback1(Object result, Object[] args, String output, PHPRPC_Error warning) {
textBlock.Text += "\r\n" + PHPConvert.ToString(result);
}
private void callback2(String result, Object[] args, String output, PHPRPC_Error warning) {
textBlock.Text += "\r\n" + result + " 泛型";
}
private void callback3(List<int> result, Object[] args, String output, PHPRPC_Error warning) {
foreach (int i in result) {
textBlock.Text += "\r\n" + i.ToString();
}
}
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
client.KeyLength = 256;
client.EncryptMode = 1;
it.hi("Ma Bingyao", new PHPRPC_Callback(callback1));
it.hi("马秉尧", callback2);
List<int> list = new List<int>(10);
Random r = new Random();
for (int i = 0; i < 10; i++) {
list.Add(r.Next());
}
it.array_sort(list, callback3);
}
}
}


这里面 hi,array_soft 都是用 PHP 发布的 PHPRPC 方法,因为很简单,大家不看也都能看懂这个程序的意思,所以 PHP 部分的具体代码我就不写了。

首先来说一下异步调用,异步调用的接口方法最后有一个 PHPRPC_Callback 类型的参数,而且这个 PHPRPC_Callback 类型还可以是泛型化的。PHPRPC_Callback 实际上是一个委托类型。该委托类型中,第一个参数是表示返回结果,第二个参数表示传递的参数,第三个参数表示服务器端重定向输出的字符串,第四个参数表示服务器端产生的警告错误。如果使用的是非泛型化的 PHPRPC_Callback 委托,则返回结果以 Object 类型返回,如果要转换为你需要的类型,需要自己调用 PHPConvert 类中的类型转换方法,如果发生调用发生错误,则返回结果就是 PHPRPC_Error 类型的一个错误对象。如果使用泛型化的 PHPRPC_Callback 委托,则返回结果可以直接转换为第一个参数所指定的类型,不需要自己使用 PHPConvert 来进行转换了。但如果调用发生错误,则会抛出 PHPRPC_Error 类型的异常,而不是作为第一个参数传递给回调方法。

不论是调用的参数,还是返回结果都可以是泛型容器类型,当然现在支持的泛型容器类型只有 List<T> 和 Dictionary<K,V>,不过对于大多数应用来说已经足够了。

最后要说明的是,在 SilverLight 2.0 中只能使用异步调用,不能使用同步调用。但是在 ASP.NET 或者WinForm 程序中(.NET 2.0 及其以上版本),既可以使用异步调用,也可以使用同步调用,而且即使同时使用也不会有冲突。当然,在 WinForm 程序中推荐使用异步调用,这样可以避免远程调用造成界面卡死的现象,而在 ASP.NET 中则推荐使用同步调用,这样可以保证调用在页面执行完之前结束。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值