java C#相互调用的全新方式

原来就是flex 和C#通讯的框架fluorinefx 

            flex 和java通讯的框架blazdes 这两个框架直接交互。把flex那块抛弃

c#通过fluorinefx调用java,java通过blazeds来调用c# 

光写了C#调用java,java调用C# 还没写,瞌睡的不行了!

好处就是AMF貌似快,比xml传输更简单!

 

using System;
using FluorineFx;
using FluorineFx.Net;
using FluorineFx.Messaging.Api;
using FluorineFx.Messaging.Api.Service;
using FluorineFx.AMF3;

namespace AMFCall
{
    class Program
    {
        NetConnection _netConnection;

        static void Main(string[] args)
        {
            Program program = new Program();
            //program.ConnectStr();//传递字符串,返回字符串
            //program.ConnectgetObj();//返回java对象
            program.Connect();//传递C#对象到java端,并返回java对象
            System.Console.ReadLine();
        }

        public void ConnectStr()
        {
            // Create NetConnection client
            _netConnection = new NetConnection();
            _netConnection.ObjectEncoding = ObjectEncoding.AMF3;
            _netConnection.NetStatus += new NetStatusHandler(_netConnection_NetStatus);
            //_netConnection.Connect("http://localhost:2896/WebSite/Gateway.aspx");

            _netConnection.Connect("http://localhost:8080/blazeds/messagebroker/amf");

            System.Console.WriteLine("*** Flash RPC ***");
            // _netConnection.Call("ServiceLibrary.MyDataService.GetCustomers", new GetCustomersHandler(), new object[] { "415" });
            System.Console.WriteLine("*** Flex RPC ***");
            
            //_netConnection.Call("my-amf", "fluorine", "ServiceLibrary.MyDataService", "GetCustomers", new GetCustomersHandler(), new object[] { "415" });
            _netConnection.Call("my-amf", "net", "net.Hello", "sayHello", new RemoteHandler(), new Object[] { "415" });


            System.Console.WriteLine("Press 'Enter' to exit");
        }
        public void ConnectgetObj()
        {
            // Create NetConnection client
            _netConnection = new NetConnection();
            _netConnection.ObjectEncoding = ObjectEncoding.AMF3;
            _netConnection.NetStatus += new NetStatusHandler(_netConnection_NetStatus);
            //_netConnection.Connect("http://localhost:2896/WebSite/Gateway.aspx");

            _netConnection.Connect("http://localhost:8080/blazeds/messagebroker/amf");

            System.Console.WriteLine("*** Flash RPC ***");
            // _netConnection.Call("ServiceLibrary.MyDataService.GetCustomers", new GetCustomersHandler(), new object[] { "415" });
            System.Console.WriteLine("*** Flex RPC ***");
            

            //_netConnection.Call("my-amf", "fluorine", "ServiceLibrary.MyDataService", "GetCustomers", new GetCustomersHandler(), new object[] { "415" });
            _netConnection.Call("my-amf", "net", "net.Hello", "sayHelloObj", new RemoteHandler(), new Object[] { "415" });


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

        public void Connect()
        {
            // Create NetConnection client
            _netConnection = new NetConnection();
            _netConnection.ObjectEncoding = ObjectEncoding.AMF3;
            _netConnection.NetStatus += new NetStatusHandler(_netConnection_NetStatus);
            //_netConnection.Connect("http://localhost:2896/WebSite/Gateway.aspx");

            _netConnection.Connect("http://localhost:8080/blazeds/messagebroker/amf");

            System.Console.WriteLine("*** Flash RPC ***");
           // _netConnection.Call("ServiceLibrary.MyDataService.GetCustomers", new GetCustomersHandler(), new object[] { "415" });
            System.Console.WriteLine("*** Flex RPC ***");
            net.NetJavaObj nj = new net.NetJavaObj();
            nj.id = 88;
            nj.name = "sdfafa";
            //_netConnection.Call("my-amf", "fluorine", "ServiceLibrary.MyDataService", "GetCustomers", new GetCustomersHandler(), new object[] { "415" });
            _netConnection.Call("my-amf", "net", "net.Hello", "sayHelloNet", new RemoteHandler(), new Object[] { nj});
            

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

        void _netConnection_NetStatus(object sender, NetStatusEventArgs e)
        {
            string level = e.Info["level"] as string;
            if (level == "error")
            {
                //received an error
                System.Console.WriteLine("Error: " + e.Info["code"] as string);
            }
            if (level == "status")
            {
                System.Console.WriteLine("Status: " + e.Info["code"] as string);
            }            
        }
    }
    public class RemoteHandler : IPendingServiceCallback {

        public void ResultReceived(IPendingServiceCall call)
        {
            object result = call.Result;
            Type type = call.Result.GetType();

            Console.WriteLine(type.Name);

            Console.WriteLine("result" + result);

            //NetJavaObj nj = (NetJavaObj)result;
            //Console.WriteLine("i" + nj.id + "//name:" + nj.name);
            //Console.ReadLine();
        }
    
    }
    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);
            }
        }
    }
}

 using System;

using System.Collections.Generic;
using System.Text;

namespace net
{
    class NetJavaObj
    {
        public int id;
        public String name;
    }
}

 

  package net;

import flex.messaging.io.ClassAliasRegistry;

public class Hello {

	
	public String sayHello(String name){
		return name+"afan";
		
	}
	public NetJavaObj sayHelloObj(String name){
		
		return new NetJavaObj(1,name);
		
	}
	
	public NetJavaObj sayHelloNet(NetJavaObj obj){
		System.out.println(obj.getId()+":"+obj.getName());
		obj.setId(323);
		obj.setName("afan");
		return obj;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		

	}

}

 package net;

import flex.messaging.io.ClassAliasRegistry;

public class NetJavaObj {

	private int id;
	private String name;
	public NetJavaObj(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	public NetJavaObj() {
		super();
		this.id = id;
		this.name = name;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		
		
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

}

 blazeds配置文件remoting-config.xml

 <?xml version="1.0" encoding="UTF-8"?>

<service id="remoting-service" 
    class="flex.messaging.services.RemotingService">

    <adapters>
    	<!-- 
    	 <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
    	 -->
        <adapter-definition id="java-object" class="test.Adapter" default="true"/>
    </adapters>

    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>
	<destination id="net">
		<properties>   
            <source>net.Hello</source>   
               
        </properties>   

	</destination>
</service>

 

 test.Adapter

  package test;

import flex.messaging.io.ClassAliasRegistry;
import flex.messaging.messages.Message;
import flex.messaging.services.remoting.adapters.JavaAdapter;

public class Adapter extends JavaAdapter {
	@Override
	public Object invoke(Message message) {
		System.out.println("invoke");
		Object obj=null;
		try{
			//不太清楚是调用之前注册还是调用之后注册,注册后C#就直接转成相应的对象,
			//而不是ASObject
			ClassAliasRegistry cr=ClassAliasRegistry.getRegistry();
			cr.registerAlias("net.NetJavaObj", "net.NetJavaObj");
			obj=super.invoke(message);
			cr.registerAlias("net.NetJavaObj", "net.NetJavaObj");
			
		}catch(Exception e){
			e.printStackTrace();
			
		}
	
		return obj;
	}
}

 

你可能感兴趣的:(java,C++,c,C#,Flex)