java与wcf通信.docx

上传人:b****5 文档编号:5361781 上传时间:2022-12-15 格式:DOCX 页数:33 大小:852.52KB
下载 相关 举报
java与wcf通信.docx_第1页
第1页 / 共33页
java与wcf通信.docx_第2页
第2页 / 共33页
java与wcf通信.docx_第3页
第3页 / 共33页
java与wcf通信.docx_第4页
第4页 / 共33页
java与wcf通信.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

java与wcf通信.docx

《java与wcf通信.docx》由会员分享,可在线阅读,更多相关《java与wcf通信.docx(33页珍藏版)》请在冰豆网上搜索。

java与wcf通信.docx

java与wcf通信

java与wcf通信例子

java与wcf通信例子1

一.摘要1

二.环境说明2

三.编写wcf服务端和客户端2

3.1建立wcf环境2

3.2编写服务端3

3.3编写客户端7

四.用axis编写ws的服务端和客户端10

4.1.环境10

1.axis2下载地址10

4.2建立java的ws服务端13

4.3生成wsdl文件14

4.4生成aar服务文件17

4.5发布aar文件20

4.6通过wsdl生成java客户端代码22

4.7以客户端和ie访问服务28

五.java访问wcf服务端33

六.wcf访问java服务端36

七.遇到的问题36

一.摘要

本文讨论了wcf服务与客户端的通信,axis服务与客户端通信,java调用wcf服务,wcf访问java服务。

二.环境说明

微软环境:

iis5.1+2.0+vs2008+.netframework3.5,采用c#语言,vm虚拟机,操作系统xpsp3ip地址:

172.7.22.24。

java环境:

jdk1.6.0.21+tomcat6.0.29+axis2(1.6.0)+MyEclipse8.6.1。

操作系统xpsp3。

ip地址172.7.22.22。

 

三.编写wcf服务端和客户端

3.1建立wcf环境

1.建立一个空的解决方案,java_wcf_0100_helloworld,如图:

 

2.添加两个项目,Service(控制台应用程序),Client(控制台应用程序),项目结构如图:

说明:

client项目下的代码是通过svcutil.exe生成的,先不管,后面会讲。

3.2编写服务端

参考msdn上的wcf的例子编写,这个服务对外提供加,减,乘,除4种服务。

需要在项目->右键->添加引用->.net下选择:

System.ServiceModal,在项目中会引用。

1.定义服务接口(Contact):

Icalculator.cs代码如下:

usingSystem;

//添加引用

usingSystem.ServiceModel;

namespaceMicrosoft.ServiceModel.Samples

{

//定义服务contrat

[ServiceContract(Namespace="http:

//Microsoft.ServiceModel.Samples")]

publicinterfaceICalculator

{

//创建服务方法

[OperationContract]

doubleAdd(doublen1,doublen2);

[OperationContract]

doubleSubtract(doublen1,doublen2);

[OperationContract]

doubleMultiply(doublen1,doublen2);

[OperationContract]

doubleDivide(doublen1,doublen2);

}

}

2.实现服务接口:

CalculatorService.cs代码如下:

usingSystem;

//添加命名空间引用

usingSystem.ServiceModel;

namespaceMicrosoft.ServiceModel.Samples

{

//实现服务contract

publicclassCalculatorService:

ICalculator

{

//实现服务方法

publicdoubleAdd(doublen1,doublen2)

{

doubleresult=n1+n2;

Console.WriteLine("接收到的加法参数:

({0},{1})",n1,n2);

//将结果输出到控制台

Console.WriteLine("计算结果:

{0}",result);

returnresult;

}

publicdoubleSubtract(doublen1,doublen2)

{

doubleresult=n1-n2;

Console.WriteLine("接收到的减法参数:

({0},{1})",n1,n2);

Console.WriteLine("计算结果:

{0}",result);

returnresult;

}

publicdoubleMultiply(doublen1,doublen2)

{

doubleresult=n1*n2;

Console.WriteLine("接收到的乘法参数:

({0},{1})",n1,n2);

Console.WriteLine("计算结果:

{0}",result);

returnresult;

}

publicdoubleDivide(doublen1,doublen2)

{

doubleresult=n1/n2;

Console.WriteLine("接收到的除法参数:

({0},{1})",n1,n2);

Console.WriteLine("计算结果:

{0}",result);

returnresult;

}

}

}

3.绑定服务:

Program.cs代码如下:

usingSystem;

usingSystem.ServiceModel;

usingSystem.ServiceModel.Description;

namespaceMicrosoft.ServiceModel.Samples

{

classProgram

{

staticvoidMain(string[]args)

{

//创建服务基地址

UribaseAddress=newUri("http:

//172.7.22.24:

80/ServiceModelSamples/Service");//如果不是在同一台电脑上进行操作,请采用ip地址

//创建服务宿主

ServiceHostselfHost=newServiceHost(typeof(CalculatorService),baseAddress);

try

{

//添加服务endpoint

selfHost.AddServiceEndpoint(

typeof(ICalculator),

newWSHttpBinding(),//添加绑定,.net提供了12种绑定方式

"CalculatorService");

//开启metadata交换

ServiceMetadataBehaviorsmb=newServiceMetadataBehavior();

smb.HttpGetEnabled=true;

selfHost.Description.Behaviors.Add(smb);

//开启服务,按任意键结束服务

selfHost.Open();

Console.WriteLine("服务已经启动");

Console.WriteLine("按回车键终止服务.");

Console.WriteLine();

Console.ReadLine();

selfHost.Close();

}

catch(CommunicationExceptionce)

{

Console.WriteLine("发生异常:

{0}",ce.Message);

selfHost.Abort();

}

}

}

}

到此wcf服务端编写完成,启动服务,在ie地址栏输入:

http:

//localhost/ServiceModelSamples/Service看到如下界面:

表示服务以成功启用,查看其wsdl,这是wsHttpBinding的wsdl,在ie中输入:

3.3编写客户端

在Microsoftvisualstudio2008->visualstudiotools->visualstudio2008命令提示行下,跳转到生成代码存放的目录:

cdC:

\wcf\java_wcf_0100_helloworld\Client。

然后输入:

svcutil.exe/language:

cs/out:

generatedProxy.cs/config:

app.confighttp:

//172.7.22.24/ServiceModelSamples/service

之后将生成的2个导入到Client项目中。

最后编写客户端调用代码:

Program.cs代码如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

usingSystem.ServiceModel;

namespaceClient

{

classClient

{

staticvoidMain()

{

//创建wcf客户端的endpoint

EndpointAddressepAddress=newEndpointAddress("http:

//172.7.22.24:

80/ServiceModelSamples/Service/CalculatorService");

CalculatorClientclient=newCalculatorClient(newWSHttpBinding(),epAddress);

//调用服务方法

//调用加法

doublevalue1=100.00D;

doublevalue2=15.99D;

doubleresult=client.Add(value1,value2);

Console.WriteLine("加法({0},{1})={2}",value1,value2,result);

//调用减法

value1=145.00D;

value2=76.54D;

result=client.Subtract(value1,value2);

Console.WriteLine("减法({0},{1})={2}",value1,value2,result);

//调用乘法

value1=9.00D;

value2=81.25D;

result=client.Multiply(value1,value2);

Console.WriteLine("乘法({0},{1})={2}",value1,value2,result);

//调用除法

value1=22.00D;

value2=7.00D;

result=client.Divide(value1,value2);

Console.WriteLine("除法({0},{1})={2}",value1,value2,result);

//关闭客户端并清理资源

client.Close();

Console.WriteLine();

Console.WriteLine("按回车键退出");

Console.ReadLine();

}

}

}

启动客户端,在启动客户端之前请确认你的服务已经启动。

编译客户端(不要运行),然后在C:

\wcf\java_wcf_0100_helloworld\Client\bin\Debug目录下运行:

Client.exe。

看到如下界面就表示成功了:

服务端:

客户端:

到此C#访问wcf服务已经完成。

四.用axis编写ws的服务端和客户端

4.1.环境

1.axis2下载地址

http:

//axis.apache.org/axis2/java/core/(我的版本1.6.0),这个版本没有backport-util-concurrent.jar包,版本是3.1,然而我在spring3.0.4里找到了这个包。

请下载axis2-1.6.0-bin.zip和axis2-1.6.0-war.zip,当然源码和文档也比较重要。

2.eclipse/myeclipse的插件下载地址:

axis2-eclipse-service-archiver-wizard.zip:

http:

//archive.apache.org/dist/ws/axis2/tools/1_4_1/

axis2-eclipse-codegen-wizard.zip:

http:

//archive.apache.org/dist/ws/axis2/tools/1_4_1/

1)安装myclipse插件,将下载来的插件包解压,然后copy到\Genuitec\MyEclipse-8.6\dropins下:

2)然后修改Axis2_Codegen_Wizard_1.3.0为Axis2_Codegen_Wizard_1.4.0,同时修改plugin.xml如下:

版本改为:

1.4.0。

在runtime下加入:

  

      

  

  

      

  

找到backport-util-concurrent.jar(可以从网上下载,我是在spring3.0.4里找到的)和geronimo-stax-api_1.0_spec-1.0.1.jar(这是axis2.1.6.0lib下的包),将它们copy到Axis2_Codegen_Wizard_1.4.0的lib下。

3)在myeclipse里增加userliberary:

导入axis2(1.6.0)下lib的所有jar包,同时导入Axis2_Codegen_Wizard_1.4.0插件下的axis2-1.4.1.jar

4)将axis2-1.6.0-war.zip中war文件,发布到tomcat中,及把war文件copy到webapps目录下。

Axis2.war是一个webservice容器,同时它也支持多种web容器,如:

tomcat,jboss等。

访问地址:

http:

//localhost:

8082/axis2/,如下:

注意:

图中的adminstration的登录用户和密码是:

admin和axis2。

当然这些都是可以修改的。

详细情况,请参考axis2的文档。

到此环境搭建完毕。

4.2建立java的ws服务端

首先,在myelipse中新建一个web工程java_wcf_conmmicate_helloworld,工程目录如下:

HelloWorld.java代码如下:

packagecom.hik.xie;

publicclassHelloWorld{

publicStringsayHello(Stringname){

returnname+"say:

hellowcf_java";

}

publicintgetCount(intinput){

returninput+100;

}

}

够简单吧。

将这个web工程发布到tomcat中。

4.3生成wsdl文件

然后通过Axis2_Service_Archiver_1.3.0生成wsdl文件。

New->other->axis2codeGenerator

添加类所在的目录,输入类的全路径名,然后点击testclassloading

选择文件导出的路径,填写wsdl文件名称。

4.4生成aar服务文件

New->other->axis2servicearchiver

选择发布工程目录下的classess:

填写服务名称,和要加载的类的全路径名:

选择输出文件的路径,同时填写输出文件名称:

到此aar服务文件生成。

4.5发布aar文件

在axis2的容器发布刚才生成的aar文件。

查看服务是否成功

4.6通过wsdl生成java客户端代码

通过wsdl生成java客户端代码有3种方式:

1.axis2自带的wsdl2java

2.myclipse的Axis2_Codegen_Wizard

3.java自带的wsimport。

下面用3种方法生成java客户端代码:

1.axis2自带的wsdl2java,首先配置axis2的环境变量:

AXIS2_HOME和PATH,然后在cmd的任意目录使用wsdl2java命令。

结果如下:

2.myclipse的Axis2_Codegen_Wizard

结果如下:

3.java自带的wsimport

结果如下:

4.7以客户端和ie访问服务

用codegenerator生成的代码编写客户端。

1.以junit测试代码访问

1./**

2.*Autogeneratedtestmethod

3.*/

4.publicvoidtestgetCount()throwsjava.lang.Exception{

5.

6.com.hik.xie.HelloServiceStubstub=

7.newcom.hik.xie.HelloServiceStub("http:

//172.7.22.22:

8082/axis2/services/HelloService");//thedefaultimplementationshouldpointtotherightendpoint

8.

9.com.hik.xie.HelloServiceStub.GetCountgetCount8=

10.(com.hik.xie.HelloServiceStub.GetCount)getTestObject(com.hik.xie.HelloServiceStub.GetCount.class);

11.getCount8.setInput(200);

12.assertNotNull(stub.getCount(getCount8));

13.GetCountResponsegcr=stub.getCount(getCount8);

14.System.out.println(gcr.get_return());

15.}

16.

17./**

18.*Autogeneratedtestmethod

19.*/

20.publicvoidtestsayHello()throwsjava.lang.Exception{

21.

22.com.hik.xie.HelloServiceStubstub=

23.newcom.hik.xie.HelloServiceStub("http:

//172.7.22.22:

8082/axis2/services/HelloService");//thedefaultimplementationshouldpointtotherightendpoint

24.

25.com.hik.xie.HelloServiceStub.SayHellosayHello10=

26.(com.hik.xie.HelloServiceStub.SayHello)getTestObject(com.hik.xie.HelloServiceStub.SayHello.class);

27.//TODO:

FillinthesayHello10here

28.

29.assertNotNull(stub.sayHello(

30.sayHello10));

31.sayHello10.setName("centre");

32.SayHelloResponseresp=stub.sayHello(sayHello10);

33.System.out.println(resp.get_return());

34.

35.}

2.以jsp访问服务

Index.jsp代码如下:

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%@pageimport="com.hik.xie.*"%>

<%@pageimport="org.apache.axis2.client.ServiceClient"%>

<%@pageimport="com.hik.xie.HelloServiceStub.*"%>

<%@pageimport="com.hik.xie.HelloServiceStub.GetCount"%>

<%@pageimport="com.hik.xie.HelloServiceStub.SayHello"%>

<%@pageimport="com.hik.xie.HelloServiceStub.GetCountResponse"%>

<%@pageimport="com.hik.xie.HelloServiceStub.SayHelloResponse"%>

<%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+":

//"+request.getServerName()+":

"+request.getServerPort()+path+"/";

%>

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

">

MyJSP'index.jsp'startingpage

--

-->

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1