java与wcf通信Word格式文档下载.docx

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

java与wcf通信Word格式文档下载.docx

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

java与wcf通信Word格式文档下载.docx

说明:

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

doubleSubtract(doublen1,doublen2);

doubleMultiply(doublen1,doublen2);

doubleDivide(doublen1,doublen2);

}

}

2.实现服务接口:

CalculatorService.cs代码如下:

//添加命名空间引用

//实现服务contract

publicclassCalculatorService:

ICalculator

//实现服务方法

publicdoubleAdd(doublen1,doublen2)

doubleresult=n1+n2;

Console.WriteLine("

接收到的加法参数:

({0},{1})"

n1,n2);

//将结果输出到控制台

计算结果:

{0}"

result);

returnresult;

publicdoubleSubtract(doublen1,doublen2)

doubleresult=n1-n2;

接收到的减法参数:

publicdoubleMultiply(doublen1,doublen2)

doubleresult=n1*n2;

接收到的乘法参数:

publicdoubleDivide(doublen1,doublen2)

doubleresult=n1/n2;

接收到的除法参数:

3.绑定服务:

Program.cs代码如下:

usingSystem.ServiceModel.Description;

classProgram

staticvoidMain(string[]args)

//创建服务基地址

UribaseAddress=newUri("

//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.ReadLine();

selfHost.Close();

catch(CommunicationExceptionce)

发生异常:

ce.Message);

selfHost.Abort();

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

//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项目中。

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

usingSystem.Collections.Generic;

usingSystem.Text;

namespaceClient

classClient

staticvoidMain()

//创建wcf客户端的endpoint

EndpointAddressepAddress=newEndpointAddress("

80/ServiceModelSamples/Service/CalculatorService"

CalculatorClientclient=newCalculatorClient(newWSHttpBinding(),epAddress);

//调用服务方法

//调用加法

doublevalue1=100.00D;

doublevalue2=15.99D;

doubleresult=client.Add(value1,value2);

加法({0},{1})={2}"

value1,value2,result);

//调用减法

value1=145.00D;

value2=76.54D;

result=client.Subtract(value1,value2);

减法({0},{1})={2}"

//调用乘法

value1=9.00D;

value2=81.25D;

result=client.Multiply(value1,value2);

乘法({0},{1})={2}"

//调用除法

value1=22.00D;

value2=7.00D;

result=client.Divide(value1,value2);

除法({0},{1})={2}"

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

client.Close();

按回车键退出"

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

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

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

Client.exe。

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

服务端:

客户端:

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

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

4.1.环境

1.axis2下载地址

//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:

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

axis2-eclipse-codegen-wizard.zip:

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下加入:

<

library 

name="

lib/geronimo-stax-api_1.0_spec-1.0.1.jar"

>

export 

*"

/>

/library>

lib/backport-util-concurrent-3.1.jar"

找到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等。

访问地址:

//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服务文件

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命令。

结果如下:

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("

//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("

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.*"

org.apache.axis2.client.ServiceClient"

com.hik.xie.HelloServiceStub.*"

com.hik.xie.HelloServiceStub.GetCount"

com.hik.xie.HelloServiceStub.SayHello"

com.hik.xie.HelloServiceStub.GetCountResponse"

com.hik.xie.HelloServiceStub.SayHelloResponse"

%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+"

:

//"

+request.getServerName()+"

+request.getServerPort()+path+"

/"

!

DOCTYPEHTMLPUBLIC"

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

html>

<

head>

<

basehref="

%=basePath%>

title>

MyJSP'

index.jsp'

startingpage<

/title>

metahttp-equiv="

pragma"

content="

no-cache"

cache-control"

expires"

0"

keywords"

keyword1,keyword2,keyword3"

description"

Thisismypage"

--

linkrel="

stylesheet"

type="

text/css"

href="

styles.css"

-->

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

当前位置:首页 > 高等教育 > 其它

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

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