0

.NETでいくつかのamfphp関数を使用して、いくつかのオブジェクトにアクセスしたかったのです。いくつか検索した後、私はそのトリックを実行するオープンソースゲートウェイの一部を見つけました。 .NET WPFアプリケーションからAMFPHP関数を使用するにはどうすればよいですか?

さて、これが私が今いるところです、そして私は本当にいくつかの助けを使うことができました。接続と適切な呼び出しを行った後

  public void Connect()
        {
            // Create NetConnection client
            _netConnection = new NetConnection();
            _netConnection.ObjectEncoding = ObjectEncoding.AMF0;
            _netConnection.NetStatus += new NetStatusHandler(_netConnection_NetStatus);
            _netConnection.Connect("http://www.mytestserver.nl/services/gateway");

            System.Console.WriteLine("*** Flash RPC ***");
            _netConnection.Call("amfphp.mytestserver.getObjects", new GetCustomersHandler(), new object[] { "415" });

            System.Console.WriteLine("Press 'Enter' to exit");
        }

そして私のハンドラーで

  public class GetCustomersHandler : IPendingServiceCallback
    {
        public void ResultReceived(IPendingServiceCall call)
        {
            object result = call.Result;
            System.Console.WriteLine("Server response: " + result);

            //DataAccess sample sends back an ArrayCollection (AMF3)
            ArrayCollection items = result as ArrayCollection;


            foreach (object item in items)
            {
                Flex.CustomerVO customer = item as Flex.CustomerVO;
                System.Console.WriteLine(customer.firstname + " " + customer.lastname);
            }
        }
    }

これは、samplesフォルダーにあるプロジェクトで行われる方法です。アイテムを反復処理できないため、結果オブジェクトにアクセスする方法を確認しました。そして、これが(少なくとも私にとっては)少しトリッキーになっていることです。リスト内のタイプオブジェクトとして結果を確認できます。結果配列(?object)にアクセスできますが、配列ではないため、コードで結果オブジェクトを反復処理するにはどうすればよいですか。明確にするために、いくつかのスクリーンショットを追加しました。

http://imageshack.us/f/685/fluorine1.png/ ここに表示されているように、46個のアイテムを含む結果が表示されます。

もう少し説明 http://imageshack.us/f/38/fluorine2.png/ (たとえば、キー、値などにアクセスしたい)。誰かが解決策やアプローチを持っていますか?難しいとは思いませんが(多分そうですが)、何かが足りないようです。誰かを助ける人はいますか?

4

2 に答える 2

0

それは確かに配列です。オブジェクトの配列です (object[])。例に示されているように、これにアクセスできます。唯一の問題は、それがどのような種類のオブジェクトであるかを知り、その型にキャストする必要があることです。

Flex.CustomerVO customer = item as Flex.CustomerVO;

オブジェクトをキャストする場所です。

于 2012-07-12T16:07:28.053 に答える
0

オブジェクトを反復処理する場合は、結果をオブジェクトの配列にキャストする必要があります。

object[] objects = (objects)result;

その後、再度キャストすることで個々のアイテムにアクセスできます。

foreach (object obj in objects)
{
    FluorineFx.ASObject asObject = (FluorineFx.ASObject)obj;
    System.Console.WriteLine(asObject.Key);
}
于 2012-07-12T16:09:39.180 に答える