与net开发webservice大全.docx
- 文档编号:27673219
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:60
- 大小:2.06MB
与net开发webservice大全.docx
《与net开发webservice大全.docx》由会员分享,可在线阅读,更多相关《与net开发webservice大全.docx(60页珍藏版)》请在冰豆网上搜索。
与net开发webservice大全
Java与net编写的webservice互调
最近由于开发工作顶用到了webservice,特意研究了一下,为了不使自己忘记,也为了其他正在寻觅相关资料的朋友少走弯路,简单记录了一下,以供大伙儿参考。
简单的说:
webservice是远程效劳器上暴露出来的一些函数接口,通过挪用它,即可在客户端展现效劳端执行的结果。
那个地址只探讨webservice效劳端和客户端用java或编写的情形,这又分为四种类型:
1、效劳端、客户端都是用编写的,那个地址以为例。
2、效劳端、客户端都是用java编写的。
3、效劳端是java编写的,客户端是编写的。
4、效劳端是编写的,客户端是java编写的。
开发环境:
++
下面对这四种类型的编写方式一一详细讲解。
一、效劳端、客户端都是用编写的。
选择“新建项目”,如以下图:
添加一个webservice,如以下图:
默许会添加一个HelloWorld方式,替换成如下函数。
PublicFunctionHelloWorld(ByValNameAsString)AsString
Return"Hi,"+Name+",这是WebService,[的系统时刻为"+("yyyy-MM-ddHH:
mm:
ss")
EndFunction
在“解决方案资源治理器”上选中,点击右键,将设为“起始页”,如以下图:
按F5运行,编写的webservice就编写好了,怎么样,很简单吧。
以上只是效劳端,此刻还需要一个客户端来验证一下。
选择新建一个空项目,如以下图
在解决方案资源治理器,右键选择添加Web引用
显现如下画面
在URL栏输入如下信息
报错,这是怎么回事呢?
原先是需要在IIS上进行记录,在Internet信息效劳添加虚拟目录,如以下图
好了,这下不报错了。
目录结构如下:
再选择“添加”-“添加新建项”,添加一个,如以下图:
在web窗体添加一个button和textbox
加入如下button事件
ProtectedSubButton1_Click(ByValsenderAsObject,ByValeAsEventArgs)Handles
DimsAsNew
=("帅哥")
EndSub
在IIS上添加上客户端的目录MyCallNetService,步骤请参考上面的操作,操作后如以下图
此刻能够执行看看结果了,在阅读器上键入
点击按钮,显现以下图:
能够看到,执行的结果完全正确。
还有一点需要提到的:
在2020已经找不到直接创建WebService的模板方式了,若是你选择.NET,会发觉缺少了WebServices模板。
2020的操作见以下图:
若是还想在2020实现2020的功能,那还能够吗?
答案是确信的,选择“新建项目”,如以下图:
二、效劳端、客户端都是用java编写的。
利用java编写webservice的方式比较多,经常使用的有JAX_WS、XFire、AXIS二、CXF,下面一一例如。
1)JAX_WS
第一编写提供效劳方式的类
package;
import-cpbin-wsdl-ssrc-dbin-r.
@WebService(targetNamespace="")
@SOAPBinding(style=classHelloWorld{
@WebMethod(action="toSayHello",operationName="toSayHello",exclude=false)
@WebResult(name="returnWord")-cp定义classpath
-wsdl生成wsdl文档
-s源文件所在路径,本例为src
-d生成文件class文件所在路径,本例为bin
-r生成wsdl路径,本例为当前路径.
以上命令会在特定目录下默许生成一个jaxws的目录,里面有webservice暴露的方式的具体描述。
结构如下:
接下来发布WebService的程序
package;
importclassStartService{
publicstaticvoidmain(String[]args){
("",newHelloWorld());
}
}
在dos命令提示符,转到bin目录执行那个程序,java目录不正确会报错提示“找不到class文件”
执行正确画面如图:
注意:
必需先要启动webservice,不然无法用wsimport生成代理类。
用wsimport自动生成客户端的代码即可实现挪用webservice。
wsimport-keep-d./bin-s./src-p用wsimport也能够生成构建的webservice客户端程序,比如下面格式:
wsimport-keep-d./bin-s./src-p生成客户端执行类的class文件的寄存目录
-s生成客户端执行类的源文件的寄存目录
-p概念生成类的包名,本例为
为WSDL_URI
将在目录下生成代理类,
那个地址还有个小技术,通过修改能够实现动态配置文件来挪用webservice。
咱们打开来看看他的内容,最重要的是下面几行:
static{
URLurl=null;
try{
URLbaseUrl;
baseUrl=".");
url=newURL(baseUrl,"");
}catch(MalformedURLExceptione){
("FailedtocreateURLforthewsdlLocation:
'',retryingasalocalfile");
());
}
HELLOWORLDSERVICE_WSDL_LOCATION=url;
}
能够看到
url=newURL(baseUrl,"");
这一行记录的是webservice的地址,只要修改那个程序将他改成从配置文件读取,即大功告成了,代码如下:
读取配置文件
package;
importclassPropertiesConfig{
publicstaticStringsite;
publicstaticStringgetSite()
{
Propertiesp=newProperties();
try
{
(newFileInputStream("../conf/"));
}
catch(Exceptione)
{
();
}
site=("webservice_site");
returnsite;
}
}
Conf目录下配置如下行:
webservice_site=修改后的文件内容
static{
URLurl=null;
Stringstr=();;
url=newURL(baseUrl,str+"?
wsdl");;
atatatSource)
atatby:
atSource)
at...4more
找了很长时刻,终于从网上找到了解决方案。
原先是惹的祸,从buildpath中去掉那个包,故障解除,疑心是XFire与JAX_WS有冲突,标记一下。
2)XFIRE
另外再介绍一种利用XFire包编写效劳端和客户端的方式。
效劳端:
先编写接口程序
packageinterfaceFlexWebService{
publicabstractStringhelloWord(Stringusername,Stringcountry);
publicabstractCollection
}
再编写实现类
package*
*
*@authorlonggangbai
*
*/
publicclassFlexWebServiceImplimplementsFlexWebService{
/*(non-Javadoc)
*@see*/
publicStringhelloWord(Stringusername,Stringcountry){
Stringresult="";
if(country==null||().length()==0){
result="hi,"+username;
}else{
result="Hello,"+username;
}
returnresult;
}
/*(non-Javadoc)
*@see*/
publicCollection
Collection
for(inti=0;i<10;i++){
("content"+i);
}
returninfos;
}
}
将程序拷贝到TOMCAT\webapps目录下,运行启动webservice。
在IE中敲入,若是显现下面的画面代表webservice部署成功。
右键export导出效劳端为一个jar报文件
客户端
在客户端项目中buildpath加入上面,
编写客户端程序
package;
importclassXFireCallWebService{
/**
*
*@paramargs
*/
reate;
XFireProxyFactoryserviceFactory=newXFireProxyFactory().getXFire());
try{
FlexWebServiceservice=(FlexWebService)(
serviceModel,serviceUrl);
Stringhello=("hi","china");
}catch(Exceptione){
();
}
}
}
右键运行RunAsjavaapplication或在DOS方式如下执行,显现下面画面代表运行成功。
还能够用自动生成工具自动生成客户端代码,本方式需要利用XFirepluginforEclipse,能够从csdn等地址下载,具体方式如下:
选取New-Other
点击“完成”,在项目中会自动生成如下目录:
编写客户端代码:
package;
import*@author:
徐哲hnfh-xuz
*@version:
*@创建时刻:
2021-6-5上午09:
04:
46
*@类说明:
*/
publicclassXFireCallXFireWebService{
publicstaticvoidmain(String[]args)throwsException
{
Stringurl="";
welcomeServicesClientclient=newwelcomeServicesClient();
"徐哲"));
}
}
右键运行RunAsjavaapplication或在DOS方式如下执行,显现下面画面代表运行成功。
3)AXIS2
效劳端
环境预备:
第一步:
第一要下载开发所需要的jar包,
下载:
下载地址:
下载:
第二步:
下载完后将解压后的文件拷贝到tomcat安装目录下的webapps文件夹下,启动tomcat后,在webapps目录下会自动解包生成axis2文件夹。
访问
,会自动生成目录,其中bin下能够生成客户端代码。
第三步:
设置环境变量
设置JAVA_HOME和AXIS2_HOME这2个环境变量,具体如下:
第四步:
下载EclipseAxis2插件:
)
(用来将效劳代码生成wsdl文件和解析将wsdl文件生成客户端代码的插件)。
下载地址能够去网上自行搜索。
将两个插件解压到Eclipse安装目录下plugins中即可。
打开Eclipse,选择File/New/Other菜单项,看到如下界面说明安装成功:
安装这两个插件的目的是:
方便生成生成Axis2客户端和Axis2效劳端。
在开发环境及Axis2环境搭建好后,咱们即可着手WebServices效劳的开发:
1.成立要发布的WebService
(1)在Eclispse中添加一个用户库命名为axis2,将axis2\lib下的包均添加进来。
这一步操作的目的是为了以后工程添加axis2所需的jar文件方便。
点击addjars,增加axis2/lib下的所有jar包,成功显示如下:
(2)成立一个JavaProject命名为webservice_axis2,将axis2用户库加入到buildpath中,结构如下:
(3)此刻开始编写要发布的WebSevice,在src中建包,成立Hello类如下:
package;
/**
*@author:
徐哲hnfh-xuz
*@version:
*@创建时刻:
2021-6-3上午10:
28:
08
*@类说明:
*/
publicclassHello{
publicStringsayHello(Stringuser){
return"Hello,"+user;
}
}
2.发布WebService
打包要发布的Service,Eclipse中New-->File-->Other-->Axis2wizards-->Axis2ServicesArchiver,依照向导选择刚成立的类编译后的class文件。
(1)选择class文件目录,注意,不是java源文件,而是classes目录,那个地址需要注意由于你的类是带包hnntsx的,因此不要选到包那个目录。
(2)连按两次“Next>”,选中“Generatetheservicexmlautomatically”
(3)按下一步,输入service名称和类名,我那个地址输入的效劳名是:
HelloService,类名是咱们方才写的类名:
,那个地址需要注意加入完整的包名。
(4)按下一步,输入service文件的保留途径和文件名,完成。
显现如下画面代表成功。
我那个地址选择的是当前项目,然后将生成的拷贝到C:
\apache-tomcat-\webapps\axis2\WEB-INF\services目录下,也能够选择生成目录为适才TOMCAT的AXIS2目录:
C:
\apache-tomcat-\webapps\axis2\WEB-INF\services,如此就不需要再拷贝了。
在中,添加
运行tomcat,在
,想从头建一个项目,能够如下操作:
在Eclipse下新建WebProject,工程名:
webservice_axis2_server。
新建包,新建类HelloWorld,代码如下:
packageclassHelloWorld{
publicStringsayHello(Stringname){return"Hello,"+name+".";}
publicStringsaySorry(Stringname){return"Sorry,"+name+".";}
publicStringgetWorld(){return"Hello,World";}
}
在WEB-INF目录下修改文件,内容如下:
xmlversion=""encoding="UTF-8"?
>
xmlns="" xmlns: xsi="" xsi: schemaLocation=" "> --Axis2configstart--> --Axis2end--> 把tomcat安装目录下的webapps/axis2/WEB-INF下的modules、service、conf、lib文件拷至项目下的WEB-INF目录下。 然后在services下新建HelloWorld/META-INF途径,META-INF下新建,内容如下: HelloWorldServiceExample 最后将项目下的web-inf目录整个都拷贝到TOMCAT新建的文件夹webservice_axis2_server下,classes也拷贝到webservice_axis2_server下,结构图如下: 启动tomcat后访问能看到类似如以下图就说明发布service成功了。 到此Axis2的WebService效劳已成功发布 客户端 客户端的访问方式有两种: 一种是通过效劳器端产生的wsdl文件利用WSDL2Java工具生成ClientStub后访问,另外一种是通过axis实现的java里面的JAX-RPC进行动态挪用,下面一一进行介绍。 第一种方式是利用自动生成客户端stub的方式,具体步骤如下: 转到C: \axis2-\bin目录下,运行以下命令: WSDL2Java-uri-p-obuild-dadb–s 会生成一个build目录 Build目录下的文件结构图如下: 将那个文件拷贝到前面的java项目中,见以下图: 编写测试客户端程序,代码如下: publicstaticStringcallwebservice(){ try{ HelloServiceStubstub=newHelloServiceStub( ""); SayHellosayHello=newSayHello(); ("xuzhe"); SayHelloResponseres=(sayHello); Stringresult=().toString(); returnresult; }catch(Exceptione){ (); } returnnull; } 在eclipse当选择runAsjavaapplication,显示结果如下: 第二种方式是远程方式挪用方式,这种方式的最大益处是灵活,不需要太多生成步骤,直接附上代码: package; import*@author: 徐哲hnfh-xuz *@E-mail *@version: *@创建时刻: 2021-6-3下午02: 49: 04 *@类说明: */ publicclassAXIS2CallWebService{ publicstaticvoidmain(String[]args){ callwebservice(); CallAXIS2Service(); } publicstaticStringCallAXIS2Service(){ Stringxml=null; //挪用AXIS2效劳端 Stringurl=""; Stringmethod="sayHello"; StringxmlStr="徐哲"; longstart=(); try{ RPCServiceClientserviceClient=newRPCServiceClient(); Optionsoptions=(); EndpointReferencetargetEPR=newEndpointReference(url); (targetEPR); //在创建QName对象时,QName类的构造方式的第一个参数表示WSDL文件的命名空间名,也确实是 definitions>元素的targetNamespace属性值 //挪用JAX-WS效劳端参数不能传入 QNameopAddEntry=newQName("",method); //参数,若是有多个,继续往后面增加即可,不用指定参数的名称 Object[]opAddEntryArgs=newObject[]{xmlStr}; //返回参数类型,那个和axis1有点区别 //invokeBlocking方式有三个参数,其中第一个参数的类型是QName对象,表示要挪用的方式名; //第二个参数表示要挪用的WebService方式的参数值,参数类型为Object[]; //第三个参数表示WebService方式的返回值类型的Class对象,参数类型为Class[]。 //当方式没有参数时,invokeBlocking方式的第二个参数值不能是null,而要利用newObject[]{} //若是被挪用的WebService方式没有返回值,应利用RPCServiceClient类的invokeRobust方式, //该方式只有两个参数,它们的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- net 开发 webservice 大全
![提示](https://static.bdocx.com/images/bang_tan.gif)