`

C# 调用java同步类

阅读更多

    NetConnection 是发送的异步http请求, 内部通过RemotingClient来访问远程,我把RemotingClient Copy过来,改成同步http.

using System;
using System.Collections.Generic;

using System.Collections;
using System.Net;
using System.IO;
using FluorineFx;
using FluorineFx.IO;
using FluorineFx.AMF3;
using FluorineFx.Exceptions;
using FluorineFx.Messaging.Messages;
using FluorineFx.Messaging.Api;
using FluorineFx.Messaging.Api.Service;
using FluorineFx.Messaging.Rtmp.Event;
using FluorineFx.Messaging.Rtmp.Service;
namespace netcalljava
{
    class RemoteService
    {

        public static Object Call(string endpoint, string destination, string source, string operation, params object[] arguments)
        {
            Object result = null;
            try
            {


                Uri uri = new Uri("http://localhost:8080/messagebroker/amf");
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
                request.ContentType = "application/x-amf";
                request.Method = "POST";

                AMFMessage amfMessage = new AMFMessage((ushort)ObjectEncoding.AMF3);

                RemotingMessage remotingMessage = new RemotingMessage();
                remotingMessage.clientId = Guid.NewGuid().ToString("D");
                remotingMessage.destination = destination;
                remotingMessage.messageId = Guid.NewGuid().ToString("D");
                remotingMessage.timestamp = 0;
                remotingMessage.timeToLive = 0;
                remotingMessage.SetHeader(MessageBase.EndpointHeader, endpoint);
                // if (_netConnection.ClientId == null)
                remotingMessage.SetHeader(MessageBase.FlexClientIdHeader, "nil");
                //     else
                //      remotingMessage.SetHeader(MessageBase.FlexClientIdHeader, _netConnection.ClientId);
                //Service stuff
                remotingMessage.source = source;
                remotingMessage.operation = operation;
                remotingMessage.body = arguments;



                AMFBody amfBody = new AMFBody(null, null, new object[] { remotingMessage });
                amfMessage.AddBody(amfBody);

                Stream requestStream = request.GetRequestStream();
                AMFSerializer amfSerializer = new AMFSerializer(requestStream);
                amfSerializer.WriteMessage(amfMessage);
                amfSerializer.Flush();
                amfSerializer.Close();

                WebResponse webResponse = request.GetResponse();
                if (webResponse == null)
                {
                    throw new Exception();
                }
                Stream responseStream = webResponse.GetResponseStream();
                if (responseStream == null)
                {
                    throw new Exception();
                }
                AMFDeserializer amfDeserializer = new AMFDeserializer(responseStream);
                AMFMessage responseMessage = amfDeserializer.ReadAMFMessage();
                AMFBody responseBody = responseMessage.GetBodyAt(0);
                for (int i = 0; i < responseMessage.HeaderCount; i++)
                {
                    AMFHeader header = responseMessage.GetHeaderAt(i);
                    //if (header.Name == AMFHeader.RequestPersistentHeader)
                    //  _netConnection.AddHeader(header.Name, header.MustUnderstand, header.Content);
                }
                Object obj = responseBody.Content;
                if (obj is ErrorMessage)
                {

                    throw new Exception();
                }
                if (obj is AcknowledgeMessage)
                {

                    result = ((AcknowledgeMessage)obj).body;

                }


                // PendingCall call = new PendingCall(source, operation, arguments);
                // RequestData requestData = new RequestData(request, amfMessage, call, callback);
                // request.BeginGetRequestStream(new AsyncCallback(this.BeginRequestFlexCall), requestData);
            }
            catch (Exception ex)
            {
                throw new Exception("get remote Error");
            }
            return result;
        }
    }
}

 

分享到:
评论

相关推荐

    JAVA通过JNI调用C#dll的整个项目工程

    Java通过JNI调用C# DLL是一个跨平台、跨语言的技术实践,主要应用于需要利用Java的稳定性和C#的高性能场景。JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。C# ...

    Java调用C#DLL

    本资源聚焦于一个具体的问题:如何在Java中调用C#编写的DLL(动态链接库)文件。下面将详细讲解这个过程,以及相关的知识点。 首先,我们需要了解DLL的本质。DLL是微软Windows操作系统中的一个重要组成部分,它封装...

    论C#与Java之异同

    - **运行时类型识别**: C#和Java都支持检查一个对象是否属于某个类的实例,但在具体操作符上略有不同。 4. **Namespaces** - **命名空间**: 两种语言都使用命名空间来组织类和避免命名冲突,但语法有所不同。 5...

    C#和java 之间基于Socket的通信

    - C#客户端创建`Socket`实例并调用`Connect()`方法,而Java服务器端创建`ServerSocket`实例,监听客户端的连接请求。 6. **实现简单通信**: - 简单通信通常涉及发送字符串或二进制数据。发送方将数据写入输出流...

    C#调用ODI webservice

    总的来说,"C#调用ODI webservice"是一个涉及数据集成、Web服务和客户端应用开发的综合实践。通过掌握这些技术,开发者能够构建起跨平台、实时的数据交换解决方案,提升系统的灵活性和可扩展性。

    java包转c#dll

    由于它们之间的不兼容性,直接调用Java的类库在C#中是无法实现的。然而,有一种技术叫做IKVM.NET,它允许Java和.NET之间进行互操作。 IKVM.NET是一个开源项目,由Glenn Block创建,其目的是在.NET平台上实现Java...

    Java程序中的C#方法调用

    C#代码应包含一个与Java本地方法相对应的静态方法,并通过P/Invoke(Platform Invoke)来调用Java的方法。P/Invoke是.NET框架的一部分,用于调用非托管代码,即C++、C或本例中的JNI函数。 ```csharp using System; ...

    在Android中调用C#写的WebService(附源代码).rar

    这里,`MyResponseObject`是自定义的Java类,它的属性对应于Web Service返回的JSON结构。 在Android应用中,还需要处理网络权限,确保在AndroidManifest.xml中添加了`INTERNET`权限: ```xml ``` 在提供的压缩包...

    c# Java SQLserver面试题

    4. **多线程**:Thread类、Runnable接口,同步机制(synchronized、Lock)。 5. **IO流**:文件读写,网络通信,NIO(New IO)框架。 6. **反射**:运行时动态加载类和调用方法。 7. **异常处理**:异常分类,抛出和...

    yh_interface.rar_yh_interface_yh_interface.dll_医保_医保调用dll

    在医疗信息化领域,医保接口的调用尤为重要,它涉及到患者医保信息的实时同步与处理,确保医疗服务的高效进行。本文将详细解析"yh_interface.dll"这一医保调用DLL在开发中的应用。 "yh_interface.dll"是一个专门...

    金蝶云K3Cloud接口

    本教程将深入探讨如何利用C#和Java语言进行金蝶K3Cloud接口的开发,以及如何进行生产订单的同步和入库操作。 1. **金蝶云K3Cloud接口基础** - **API概述**:金蝶K3Cloud API提供了丰富的服务,包括但不限于数据...

    jvm4csharp:使用JNI在C#和Java之间进行无缝的进程内通信。 公开Java类库,并允许使用C#以面向对象的方式创作代理类

    JVM4CSharp提供了一个中间层,使得C#程序可以透明地调用Java的类库,就像调用本地.NET组件一样,从而实现了C#和Java之间的无缝集成。 JVM4CSharp的工作原理如下: 1. **启动Java虚拟机(JVM)**:C#程序需要首先...

    泛微 ecology9.0 第三方系统消息推送接口调用文档 .docx

    泛微Ecology9.0平台提供了Java源码推送接口,允许开发者通过Java代码调用该接口,实现消息的推送和处理。该接口提供了发送消息、修改消息业务状态和删除消息等功能,满足业务系统的需求。 三、 通过HTTP接口推送...

    人事管理系统里的人事信息同步到企业微信通信录

    3. **接口调用**:使用Java的HTTP客户端库(如HttpURLConnection或Apache HttpClient)发起HTTP请求,向企业微信API发送同步请求,携带整理好的数据。 4. **错误处理与重试机制**:调用API时可能会遇到网络问题或...

    跨应用调用之AIDL

    3. **生成代码**: 当我们在Android Studio中添加了AIDL文件后,编译过程会自动生成对应的Java接口和实现类,便于我们在客户端和服务端使用。 ### 二、使用步骤 1. **创建AIDL文件**: 在Android Studio中,创建一个...

    华浦教育第二学期Java、C#测试复习资料

    6. **多线程**:Java支持多线程编程,理解线程的生命周期、同步机制(如synchronized关键字,Lock接口)以及并发工具类(如ExecutorService,Semaphore等)。 7. **反射机制**:通过反射,可以在运行时动态地获取类...

    java操作com组件

    Java操作COM组件是一种技术,允许Java应用程序与由C++或C#等其他语言开发的COM(Component Object Model)组件进行交互。这种交互性是通过中间库实现的,比如JACOB(Java-COM Bridge),它为Java提供了调用COM对象的...

    C#解决SQlite并发异常问题的方法(使用读写锁)

    Android提供了SqliteOpenHelper类,加入Java的锁机制以便调用。但在C#中未提供类似功能。 作者利用读写锁(ReaderWriterLock),达到了多线程安全访问的目标。 using System; using System.Collections.Generic; ...

Global site tag (gtag.js) - Google Analytics