`

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;
	}
}

 

  • C_.rar (423.7 KB)
  • 下载次数: 30
1
3
分享到:
评论
2 楼 sulanyan29 2012-04-11  
楼主  你好  有个问题想问下,为什么你的NetJavaObj等类没有用到ClassAliasRegistry类,却还要在前面引入包
import flex.messaging.io.ClassAliasRegistry;呢?
1 楼 hcb163 2011-09-22  

相关推荐

    Unity C# 和Java互相调用变量

    这是一个DEmo,讲解了Unity 3D的编译顺序,以及C# 和 JavaScript 代码之间的变量相互调用,简单明了!

    jni4net C# java 相互调用

    在C#中调用Java代码时,你需要定义一个接口,该接口映射到Java中的类,然后使用`CreateJavaProxy`方法创建Java对象的代理。同样,在Java中调用C#代码时,你需要定义一个.NET接口,并在Java代码中使用`CreateNetProxy...

    java程序调用.net/c#的webservice

    Java程序调用.NET/C#的Web服务是一种跨平台的交互方式,主要依赖于SOAP(Simple Object Access Protocol)协议,使得不同编程语言开发的应用程序能够相互通信。在本场景中,用户已经提供了一个.NET的Web服务,而我们...

    C#调用java demo源码.rar

    为了使两者能够互相调用,我们需要一个中间层,这个中间层通常是通过Java Native Interface (JNI) 实现的。然而,对于更简单的场景,如调用Java的预编译类库(jar文件),我们可以利用IKVM.NET这样的开源项目,它...

    Java调用C#安全认证的Web服务

    虽然Java和C#是不同的编程语言,但通过Web服务,它们可以相互通信。Java使用JAX-WS(Java API for XML Web Services)或者JAX-RS(Java API for RESTful Web Services)来创建和消费Web服务,而C#则使用.NET框架中...

    C#与JAVA互相调用.pdf

    在IT领域,跨平台开发和不同语言间的交互是常见的需求,C#和Java作为两种广泛应用的编程语言,有时需要在同一个项目中互相调用函数或访问变量。以下将详细讲解如何实现这一目标。 1. 在JavaScript中访问C#函数: -...

    Unity中C#和Java的相互调用实例代码

    在开发使用Unity引擎制作的游戏或应用程序时,有时需要在Unity的C#脚本与Android平台上的Java代码之间进行相互调用,以实现特定的功能。这种需求通常出现在接入特定的SDK、使用原生设备功能、或者进行特定业务逻辑...

    c# java互相转换工具

    标题中的"C# Java互相转换工具"指的是一个软件或库,旨在帮助开发者在C#和Java之间进行代码迁移或互操作。这个工具可能是为了方便那些在两个不同平台间工作或者需要跨语言共享代码的开发人员。从描述中的链接来看,...

    用java调用C#编写的Webservice.pdf

    9. **互操作性**:Java和C#之间能够互相调用Web服务,得益于它们对标准协议如SOAP的共同支持,以及像WSDL这样的描述语言,使得不同语言的客户端能够理解服务的接口。 在实际应用中,开发者需要注意网络环境、权限...

    C#调用Java类的方法[文].pdf

    描述简短地指出,通过打包Java的Class文件成JAR,然后使用IKVM工具将其转换为C#可用的DLL,可以实现C#对Java类的调用,体现了“拿来主义”的编程思想,使得不同语言间的代码能够互相利用。 标签"软件开发"表明这个...

    C++/java/C#语言的AES加密解密

    标题中的"C++/java/C#语言的AES加密解密"涉及到的是三种常用编程语言——C++、Java和C#在实现AES(Advanced Encryption Standard,高级加密标准)算法上的应用。AES是一种广泛使用的对称加密算法,它在信息安全领域...

    整合java和c#_Javac#交互_

    这些系统作为消息传递的中介,使得Java和C#应用可以在不直接互相依赖的情况下交换数据。 最后,对于特定场景,例如游戏开发,Unity引擎提供了一个混合环境,允许开发者使用C#和Java(通过Unity的插件系统)编写代码...

    一个C#发布服务和JAVA调用服务的demo.rar

    Web Service是一种基于互联网的、平台无关的、标准的通信方式,使得不同的应用程序可以相互通信和交换数据。在这个示例中,C#作为服务提供者,通过创建一个ASMX(ASP.NET Web Service)服务,暴露了可供外部调用的...

    JAVA_C#程序员面试宝典2

    15. **构造函数的相互调用**:C#中,一个构造函数可以通过`this`关键字调用本类的其他构造函数,以便代码复用。示例代码展示了如何在构造函数中使用`this`调用其他构造函数。 16. **运算符重载**:C#支持运算符重载...

    C#调用webservice

    ### C# 调用 Java 开发的 WebService 在跨平台、跨语言的应用系统集成中,WebService 技术作为一种标准的解决方案被广泛采用。它允许不同编程语言编写的程序之间进行通信。本文将详细介绍如何使用 C# 来调用 Java ...

    setup_jetty_frp_java_c#.rar

    3. **Java和C#互相调用**:要实现Java和C#之间的互相调用,可能需要借助中间件,如FRP(函数响应式编程)框架或者自定义的RPC(远程过程调用)机制。这通常涉及到序列化和反序列化,将对象转换成可以在网络上传输的...

    unity2019使用eclipse 与java相互通信

    1. 在Unity中,我们需要定义一个C#类来封装Java插件的调用。 ```csharp using UnityEngine; using System.Runtime.InteropServices; public class JavaCallWrapper : MonoBehaviour { [DllImport("libunity", ...

Global site tag (gtag.js) - Google Analytics