`
alex8946
  • 浏览: 365123 次
  • 性别: Icon_minigender_1
  • 来自: 广东广州
社区版块
存档分类
最新评论

.Net/C# 与 J2EE/Java Web Service 互操作完整实例

阅读更多

.Net 与 J2EE/Java Web Service 互操作完整实例

实现支持文件分块多点异步上传的 J2EE/Java Web Services 及其 .Net 非 Web 客户端应用程序异步上传
本文参考:
实现支持文件分块多点异步上传的 Web Services 及其客户端(非Web)应用程序调用相关异步执行的 Web Method
http://blog.csdn.net/playyuer/archive/2004/12/11/213069.aspx
升级到 JDK 5.0 Update 1 or 2 定制部署 WebServices - Axis 终于正常了!
http://blog.csdn.net/playyuer/archive/2005/03/01/306360.aspx

为了使程序及环境简洁,本文均使用最简陋的 NotePad 编写程序或配置环境,命令行编译程序!
不使用任何集成开发环境(IDE)!

相关源程序下载:
http://www.cnblogs.com/Files/Microshaoft/jws.net.rar

Sever Side:
 采用 Resin/Tomcat + Axis 来部署 java Web Service。
 1.首先确认 Windows 系统中安装(不一定要安装,解压到目录即可)了如下软件:
  J2SE(TM) Development Kit 5.0 Update 4 (JDK 5.0 Update 4):
  http://java.sun.com/j2se/1.5.0/download.jsp

  Web Application Server: Resin/Tomcat 二者有其一即可:
  Resin v2.1.16:
  http://www.caucho.com/download/resin-2.1.16.zip
  Tomcat v5.5.9:
  http://apache.justdn.org/jakarta/tomcat-5/v5.5.9/bin/jakarta-tomcat-5.5.9.zip
  下载后解压到某目录,如:
  D:\dotNet.J2EE\resin-2.1.16\
  或
  D:\dotNet.J2EE\jakarta-tomcat-5.5.9\

  Web Services - Axis
  http://apache.freelamp.com/ws/axis/1_2_1/axis-bin-1_2_1.zip
  下载后解压到某目录,如:
  D:\dotNet.J2EE\axis-1_2_1\
  然后将该目录下的 webapps 下的 axis 子目录,复制到:
  D:\dotNet.J2EE\resin-2.1.16\webapps\
  或
  D:\dotNet.J2EE\jakarta-tomcat-5.5.9\webapps\
  即生成如下路径:
  D:\dotNet.J2EE\resin-2.1.16\webapps\axis\
  或
  D:\dotNet.J2EE\jakarta-tomcat-5.5.9\webapps\axis\

  至此就具备运行 Axis 的基本条件了:
  先做一下 Java Web Application Server 端口配置到 1080:
  (如果你的端口不冲突,可以跳过此步)
  Resin:
  D:\Resin\resin-2.1.16\conf\resin.conf
  用 IE 访问:
  http://localhost:1080/axis/
  应该看到:
  Apache-AXIS 主页
  点击超链接:
  Validation - Validate the local installation's configuration
  see below if this does not work.
  访问页面:
  http://localhost:1080/axis/happyaxis.jsp
  就可以检测当前环境是否满足运行 Apache-AXIS。
  根据页面提示下载到所有 zip 文件:
  http://192.18.97.238/ECom/EComTicketServlet/BEGIN8656005BAB2BAA9A4B1688FB7D4AF765/-2147483648/972910143/1/359918/359906/972910143/2ts+/westCoastFSEND/7017-jaf-1.0.2-oth-JPR/7017-jaf-1.0.2-oth-JPR:1/jaf-1_0_2-upd2.zip
  http://192.18.97.186/ECom/EComTicketServlet/BEGIN87ACAEFABC9A644DBEC89773E476BF24/-2147483648/972928407/1/540782/540770/972928407/2ts+/westCoastFSEND/javamail-1_3_2-oth-JPR/javamail-1_3_2-oth-JPR:1/javamail-1_3_2-upd.zip
  http://xml.apache.org/security/dist/java-library/xml-security-bin-1_2_1.zip
  各自解压后得到所需所有 jar 包文件:
  activation.jar
  axis-ant.jar
  axis.jar
  commons-discovery-0.2.jar
  commons-logging-1.0.4.jar
  commons-logging-api.jar
  commons-logging.jar
  imap.jar
  jaxrpc.jar
  log4j-1.2.8.jar
  mail.jar
  mailapi.jar
  pop3.jar
  saaj.jar
  smtp.jar
  tt.txt
  wsdl4j-1.5.1.jar
  xalan.jar
  xercesImpl.jar
  xml-apis.jar
  xmlsec-1.2.1.jar
  xmlsecSamples-1.2.1.jar
  xmlsecTests-1.2.1.jar

  将这些文件全部复制到如下目录:
  D:\dotNet.J2EE\resin-2.1.16\webapps\axis\WEB-INF\lib
  或
  D:\dotNet.J2EE\jakarta-tomcat-5.5.9\webapps\axis\WEB-INF\lib
  再次访问:
  http://localhost:1080/axis/happyaxis.jsp
  以验证是否完全满足运行 Apache-AXIS 的环境,
  如无错误就说明已经配置好服务器了!

          <!-- the http port -->
          
<http port='1080'/>

  Tomcat:
  D:\dotNet.J2EE\jakarta-tomcat-5.5.9\conf

            <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
            
<Connector port="1080" maxHttpHeaderSize="8192"
                       maxThreads
="150" minSpareThreads="25" maxSpareThreads="75"
                       enableLookups
="false" redirectPort="8443" acceptCount="100"
                       connectionTimeout
="20000" disableUploadTimeout="true" />

   然后,启动 Java Web Application Server:
  Resin:
  D:\dotNet.J2EE\resin-2.1.16\bin\httpd.exe
  Tomcat:
  (启动 Tomcat 要预先配置 JAVA_HOME 环境变量)
  D:\dotNet.J2EE\jakarta-tomcat-5.5.9\bin\start.bat

 

 2.编写 Java Web Service 程序:
  其实实现 Web Service 的 Java 类没啥特殊的,
  下面程序就是:
  实现支持文件分块多点异步上传的 Java Web Services (Server Side)
//=========================================================================
 

 

/**//*
    Class1.jws
    Class1.java
    javac Class1.java
    java -cp %axis_lib%;%classpath%;. org.apache.axis.client.AdminClient deploy.wsdd -p1080
*/

import java.io.
*;
import java.lang.
*;

public class Class1
{
    
public static void main(String[] args) 
    
{
        System.
out.println("Hello World!");
    }

    
public String SayHelloTo(String Who)
    
{
        
return "你好: " + Who;
    }

    
public String SayHelloToo(String Who)
    
{
        
return "你好: " + Who;
    }

    
public String UploadFileBytes(byte[] Bytes,String FileName)
        throws Exception
    
{
        
return UploadFileChunkBytes(Bytes, 0, FileName);
    }

    
public String UploadFileChunkBytes(byte[] Bytes,int Position,String FileName)
        throws Exception
    
{
        
//"d:\\Server\\Upload\\" 为服务器端路径
        String ServerPath = "d:\\Server\\Upload\\";
        java.io.RandomAccessFile raf 
= new java.io.RandomAccessFile(ServerPath + FileName,"rws");
        raf.skipBytes(Position);
        raf.write(Bytes);
        
//该 Bytes 的字节要写到 服务器端 相应文件的从 Position 开始的字节
        raf.close();

        raf 
= null;
        System.gc();
        
return FileName + " 文件块: 位置[" + Position + "," + (Position + Bytes.length) + "] 大小(" + Bytes.length + ") 上传成功!";
    }

    
public String CreateBlankFile(String FileName,int Length) //建议由客户端同步调用
        throws Exception
    
{
        
//"d:\\Server\\Upload\\" 为服务器端路径
        String ServerPath = "d:\\Server\\Upload\\";
        FileOutputStream fos 
= new FileOutputStream(ServerPath + FileName);
        fos.write(
new byte[Length], 0, Length);
        fos.close();
        fos 
= null;
        System.gc() ;
        
return FileName + " (" + Length + ") 空白文件已经创建!";
    }


    
public byte[] DownloadFileBytes(String FileName)
        throws Exception
    
{
        File f 
= new File(FileName);
        FileInputStream fis 
= new FileInputStream(f);
        
int i = (int) f.length();
        
byte[] b = new byte[i];
        fis.read(b,
0,i);
        fis.close();
        fis 
= null;
        f 
= null;
        System.gc() ;
        
return b;
    }

}

 

//=========================================================================

  如果上面程序存为: Class1.jws 文件,直接复制到:
  D:\dotNet.J2EE\resin-2.1.16\webapps\axis\Class1.jws
  或
  D:\dotNet.J2EE\jakarta-tomcat-5.5.9\webapps\axis\Class1.jws
  即可通过 IE 直接访问如下 URL 地址:
  http://localhost:1080/axis/Class1.jws
  这就如同 .Net Web Service .asmx 的前代码方式

  接下来着重介绍一下定制部署 Java Web Service
  将上面程序存为: Class1.java 文件,并用如下命令行编译:
  javac.exe Class1.java
  生成的 Class1.class 文件复制到:
  D:\dotNet.J2EE\resin-2.1.16\webapps\axis\WEB-INF\classes\Class1.class
  或
  D:\dotNet.J2EE\jakarta-tomcat-5.5.9\webapps\axis\WEB-INF\classes\Class1.class
  编写部署文件
  deploy.wsdd (undeploy.wsdd):
  在通过如下命令行部署该 Web Service ,此时 Java Web Application Server 应已经运行:
    java -cp %axis_lib%;%classpath%;. org.apache.axis.client.AdminClient deploy.wsdd -p1080
  如果部署成功屏幕将会输出:

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    
<service name="Class1Service" provider="java:RPC">
        
<parameter name="className" value="Class1"/>
        
<parameter name="allowedMethods" value="*"/>
    
</service>
</deployment>

 

Processing file deploy.wsdd
<Admin>Done processing</Admin>

  如果在 Resin 上部署失败,可在:
  D:\Resin\resin-2.1.16\conf\resin.conf
  中:

  Tomcat 上暂没发现上面部署失败问题!
  部署成功后,在下面文件:
  D:\dotNet.J2EE\resin-2.1.16\webapps\axis\WEB-INF\server-config.wsdd
  或
  D:\dotNet.J2EE\jakarta-tomcat-5.5.9\webapps\axis\WEB-INF\server-config.wsdd
  中,已经被自动添加如下配置:

 <service name="Class1Service" provider="java:RPC">
  
<parameter name="allowedMethods" value="*"/>
  
<parameter name="className" value="Class1"/>
 
</service>

  当然也可以手工直接填写配置 server-config.wsdd 而不使用命令行工具!
  至此如不出意外 java Web Service 已经部署完毕!

Client Side:
  http://localhost:1080/axis/services/Class1Service?wsdl
  已经可以正常访问!
 java Client:
  还可以用解压 axis-bin-1_2_1.zip 后:
  D:\dotNet.J2EE\axis-bin-1_2_1\axis-1_2_1\samples\client\DynamicInvoker.java
  用如下命令行编译后:
  javac -cp %classpath%;%axis_lib%;. -Xlint:unchecked DynamicInvoker.java
  生成 DynamicInvoker.class,
  再如下命令行运行:
  java -cp %axis_lib%;%classpath%;. DynamicInvoker http://localhost:1080/axis/services/Class1Service?wsdl SayHelloTo 小平
  其中 %axis_lib% 为环境变量! 其中 %classpath% 为环境变量!
  测试如果正常则输出:

Reading WSDL document from 'http://localhost:1080/axis/services/Class1Service?wsdl'
Preparing Axis dynamic invocation
Executing operation SayHelloTo with parameters:
in0=小平
SayHelloToReturn=你好: 小平

Done!

 .Net Client:
  先用如下命令生成代理类的程序 C# 代码:
  % Visual Studio .Net 2003 安装目录下的 %\SDK\v1.1\Bin\wsdl.exe
  具体命令行如下:
  wsdl.exe /l:CS /out:Class1ServiceProxy.cs http://localhost:1080/axis/services/Class1Service?wsdl
  然后用如下命令编译生成程序集: Class1ServiceProxy.dll
  csc /t:library Class1ServiceProxy.cs  然后用如下命令编译生成程序集: Class1ServiceClient.exe
  csc Class1ServiceClient.cs /r:Class1ServiceService.dll

using System;
using System.IO;

public class Class1
{
    
static void Main(string[] args)
    
{
        
//Download(ServerSidepath, ClientSidePath)
        
//Download(@"客户端本地路径", @"服务器端路径");
        Download(@"d:\server\download\editplus.rar"@"e:\download_editplus.rar");
        System.Console.WriteLine(
"down End");

        System.Console.WriteLine(
"同步 up file exec ");
        UploadFile(
@"d:\Northwind.mdb");
        System.Console.WriteLine(
"同步 up file End\n");

        System.Console.WriteLine(
"异步 up chunks exec ");
        UploadFileChunks(
@"d:\editplus.rar"64);
        System.Console.ReadLine();
    }


    
public static void UploadFile(string LocalFileName)
    
{
        Class1Service xx 
= new Class1Service();
        FileStream fs 
= new FileStream(LocalFileName, FileMode.Open); //Client Side Path
        byte[] buffer = new byte[fs.Length];
        fs.Read(buffer, 
0, buffer.Length);
        
//调用 "同步执行" 的本地 Web Sevices 代理类的&nb
分享到:
评论

相关推荐

    iPhone高级编程:使用Mono Touch和.NET/C# 高清 pdf

    《iPhone高级编程:使用Mono Touch和.NET/C#》从基本的概念入手,全面地介绍了基于monotouch使用C#/.net进行iphone应用程序开发。从monotouch和.net开发环境到objective-c和c#开发语言,从基于monotouch进行iphone...

    《.NET-C#面试手册》

    .NET/C#⾯试题汇总系列:基础语法 .NET/C#⾯试题汇总系列:⾯向对象 .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF! .NET/C#⾯试题汇总系列:多线程 .NET/C#⾯试题汇总系列:ASP.NET MVC .NET/C# ⾯...

    C#开发Android应用实战——使用Mono for Android和.NET/C#(移动与嵌入式开发技术)完整版

    C#开发Android应用实战——使用Mono for Android和.NET/C#(移动与嵌入式开发技术)是一本很不错的书籍,但网上下载的多是不完整的。该版本是完整版。希望对大家有所帮助。

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

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

    FastReport For Vb/vb.net/C#/J#/C++

    [Vb.Net/C#/J#] 需求:My_FastReport.dll/adodb.dll/Interop.My_FastReport.dll [C++] 需求:My_FastReport.dll/adodb.dll/Interop.My_FastReport.1.0.dll .net 本案例基于.net2005开发平台 QQ:122391458 E-mail:Hz...

    最新.NET/C#全套大型微信二次开发框架源码(免费)

    最新 价值15K的大型微信二次开发框架源码免费供大家开发学习。 功能涵盖现有所有微信开发接口,功能丰富,供各位微信开发的朋友下载学习。 ...文件经过.7Z格式高压缩比压缩,仅20多MB,方便大家下载。

    FastReport For Vb/Vb.net/C#/C++/J#

    [Vb.Net/C#/J#] 需求:My_FastReport.dll/adodb.dll/Interop.My_FastReport.dll [C++] 需求:My_FastReport.dll/adodb.dll/Interop.My_FastReport.1.0.dll .net 本案例基于.net2005开发平台 QQ:122391458 E-mail:Hz...

    .NET/C# 英文面试题[附答案]汇总 1

    - **CTS(Common Type System)**:全称为公共类型系统,它是CLR的一部分,包含了VB.NET/C#.NET/J#等不同语言的所有数据类型信息。CTS描述了类型在运行时如何声明、使用和管理,促进了跨语言集成、类型安全和高性能...

    《.NET_C#面试手册》.pdf

    .net面试题汇总,涵盖基础语法,面向对象,集合,异常,泛型,LINQ,委托,多线程,数据库概念

    ASP.net 中用C#调用Java web service 图解教程

    ASP.NET 中使用 C# 调用 Java Web Service ...在 ASP.NET 中使用 C# 调用 Java Web Service 需要了解 Web Service 的基本概念、使用 C# 调用 Java Web Service 和在 ASP.NET 中实现 Web Service 的客户端和服务器端。

    ASP.NET/C#图书馆管理系统

    【ASP.NET/C#图书馆管理系统】是一款基于ASP.NET技术并采用C#编程语言开发的应用系统,专为计算机毕业设计而设计,适用于学习和实践。在这个项目中,开发者利用了微软的.NET框架,结合C#的强大功能,构建了一个高效...

    ASP.NET/C#火车订票系统

    ASP.NET/C#火车订票系统是一款基于Web技术的在线预订火车票的应用程序,它整合了多项功能以提供全面的火车票务服务。该系统利用ASP.NET框架和C#编程语言,构建了一个用户友好的交互界面,同时实现了后端的数据处理和...

    ASP.NET/C#超市库存管理系统

    ASP.NET/C#超市库存管理系统是一款基于ASP.NET技术开发的,用于超市日常运营的全面库存管理软件。该系统涵盖了商品入库、出库、员工信息管理、查询、统计以及数据查询与统计等多个关键功能,旨在提高超市的运营效率...

    微信公众平台(asp.net/c#版)

    微信公众平台(asp.net/c#版) 欢迎下载...查看

    毕业设计----ASP.NET/C#家具网上购物网站

    【标题解析】:“毕业设计----ASP.NET/C#家具网上购物网站”这个标题表明这是一个基于ASP.NET技术,使用C#编程语言开发的项目,主要用于家具类产品的在线销售。它是一个计算机科学或信息技术专业的毕业设计,意味着...

    基于.NET/C#平台socket技术开发的一个多人在线聊天室系统(WinForm)

    综上所述,这个项目提供了一个实践.NET/C# Socket编程的实例,特别适合学习网络通信、多线程处理以及WinForm应用开发。通过分析源代码和参考提供的教程,开发者可以深入了解如何使用C#实现一个多人聊天系统,以及...

    一个完全免费的WEB打印插件控件,支持:C#/vb.net/asp/PHP/JSP,也有实例

    "一个完全免费的WEB打印插件控件,支持:C#/vb.net/asp/PHP/JSP,也有实例" 提供了一个解决方案,允许开发者在各种Web应用平台上实现便捷的打印功能。 这个插件控件兼容多种编程语言,如C#、VB.NET、ASP、PHP和JSP,...

    一个应用程序框架,您可以将它集成到任何 .NET/C# 应用程序中

    一个应用程序框架,您可以将它集成到任何 .NET/C# 应用程序中。让 .NET 开发更简单,更通用,更流行。

    ASP.NET/c# Sql Server 学生学籍管理系统

    ASP.NET/C#与SQL Server是开发企业级Web应用程序的常用技术栈,尤其在构建复杂的管理信息系统,如学生学籍管理系统时。在这个系统中,ASP.NET提供了服务器端的编程框架,而C#则作为主要的编程语言,用于实现业务逻辑...

    .net/java/ios三种语言可通用的加密解密方法

    一个Android IOS Java通用的AES128加密解密Demo、这个Demo可以满足用Java开发的后端接口、但是如果不巧你用的.net开发的后台程序、那么我们又应该怎么去编写后端的程序呢?今天给大家分享一个比较强大的Demo、可以...

Global site tag (gtag.js) - Google Analytics