PHPRPC 3.0.1 for .NETの新機能(SilverLight 2.0対応)


SilverLight 2.0、非同期呼び出しと汎用サポートはPHPRPC 3.0.1 forである.NETに追加された新しい特徴について,以下では,この3つの特徴を1つの小さなプログラムで実証する.まず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
" + PHPConvert.ToString(result); } private void callback2(String result, Object[] args, String output, PHPRPC_Error warning) { textBlock.Text += "\r
" + result + " "; } private void callback3(List<int> result, Object[] args, String output, PHPRPC_Error warning) { foreach (int i in result) { textBlock.Text += "\r
" + 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_ソフトはすべてPHPで配布するPHPRPCの方法で、とても简単なため、みんなが见なくてもすべてこのプログラムの意味を理解することができて、だからPHP部分の具体的なコードは私は书きません.
まず非同期呼び出しについてお話ししますが、非同期呼び出しのインタフェースメソッドには最後にPHPRPC_があります.Callbackタイプのパラメータ、そしてこのPHPRPC_Callbackタイプは汎用化されてもよい.PHPRPC_Callbackは実際には依頼タイプです.この依頼タイプでは、1番目のパラメータは戻り結果を表し、2番目のパラメータは伝達されたパラメータを表し、3番目のパラメータはサーバ側のリダイレクト出力の文字列を表し、4番目のパラメータはサーバ側で発生した警告エラーを表す.非汎用化されたPHPRPCを使用している場合Callbackが依頼すると、返された結果はObjectタイプで返されます.必要なタイプに変換するには、PHPConvertクラスのタイプ変換メソッドを自分で呼び出す必要があります.呼び出しにエラーが発生した場合、返された結果はPHPRPC_です.Errorタイプのエラーオブジェクト.汎用化されたPHPRPCを使用するとCallbackが依頼すると、返された結果は最初のパラメータで指定されたタイプに直接変換でき、PHPConvertを自分で使用して変換する必要はありません.ただし、呼び出しエラーが発生するとPHPRPC_が放出されます最初のパラメータとしてコールバック法に渡すのではなく,Error型の異常を示した.
呼び出されたパラメータにかかわらず、返された結果は汎用コンテナタイプであってもよいが、現在サポートされている汎用コンテナタイプはListおよびDictionaryのみであるが、多くのアプリケーションでは十分である.
最後に、SilverLight 2.0では非同期呼び出しのみが使用でき、同期呼び出しは使用できません.でもASP.NETまたはWinFormプログラム(.NET 2.0以降)では、非同期呼び出しも同期呼び出しも使用できますし、同時に使用しても競合はありません.もちろん、WinFormプログラムでは非同期呼び出しの使用を推奨し、これによりリモート呼び出しによるインタフェースのカード死を回避することができ、ASP.NETでは同期呼び出しを推奨し、ページの実行が完了する前に呼び出しが終了することを保証します.