图文并茂——使用xfire编写webservice,并通过C#调用

.首先建立一个web service工程:
new_wizard1.gif
new_wizard2.gif


new_wizard3.gif
4.BMP
点击finish之后,myeclipse自动帮你生成services.xml以及web应用目录结构,其中的services.xml是你导出服务的配置文件,注意在WEB-INF/web.xml文件中配置了xfire自己的servlet.

<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

2.接下来,现在编写要导出的pojo类,首先是接口:

package net.rubyeye.webservicedemo;
//Generated by MyEclipse
public interface IHelloWorldService {
public String sayHello(String name);
}

这个接口我们只提供一个方法:sayHello(),我们没有采用JSR181标注式的声明方式,还是采用xml配置文件。然后是实现类:

package net.rubyeye.webservicedemo;
//Generated by MyEclipse
public class HelloWorldServiceImpl implements IHelloWorldService {
public String sayHello(String name){
return "hello,"+name;
    }
}

最后,配置下services.xml文件:

<service>
<name>HelloWorldService</name>
<serviceClass>
            net.rubyeye.webservicedemo.IHelloWorldService
</serviceClass>
<implementationClass>
            net.rubyeye.webservicedemo.HelloWorldServiceImpl
</implementationClass>
<style>wrapped</style>
<use>literal</use>
<scope>application</scope>
</service>

我们的web服务名称叫做HelloWorldService,接口是IHelloWorldService,实现类是HelloWorldServiceImpl。注意,其实我们这三个步骤可以一步完成,只要直接使用myeclipse的new web service向导即可
new_webservice_wiz1.gif
new_webservice_wiz1_codefirst2.gif
3.然后将此工程部署到tomcat上,通过http://localhost:8081/HelloWorld/services/HelloWorldService?wsdl可以看到生成的wsdl文件。注意,在部署之后,services会被拷贝到WEB-INF\classes\META-INF\xfire目录下,xfire会自动搜索此目录并加载配置文件。我们可以编写一个client来测试web服务,你也可以点击myeclipse上的Launch the Web Services来测试web服务
webexplorer_launch.gif
4.编写client代码:

package net.rubyeye.webservicedemo;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
public class HelloWorldClient {
public static void main(String args[]) {
        Service srvcModel = new ObjectServiceFactory()
                .create(IHelloWorldService.class);
        XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
                .newInstance().getXFire());
        String helloWorldURL = "http://localhost:8081/HelloWorld/services/HelloWorldService";
try {
            IHelloWorldService srvc = (IHelloWorldService) factory.create(
                    srvcModel, helloWorldURL);
            System.out.print(srvc.sayHello("dennis"));
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

执行,打印:hello,dennis
注意,你也可以使用MyEclipse的new webservice client向导自动生成client,同时生成供客户端调用的stub类等。
最后,我们再编写一个C#调用此web service的例子。
1.在vs.net中新建一个windows 应用程序项目,并添加一个button,和一个label
c1.BMP
c2.BMP
2.项目菜单——》添加web应用,输入我们要调用的web服务的wsdl文件的url,并点击前往。
c3.BMP
3.添加引用之后,vs.net会自动帮你生成提供给客户端调用的stub等,这些文件在名为localhost的命名空间下。此空间下将有一个类,名为HelloWorldService。最后,在button1的onclick事件中添加代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace MyProject
{
public partial class Form1 : Form
    {
        localhost.HelloWorldService helloService = new localhost.HelloWorldService();
public Form1()
        {
            InitializeComponent();
        }
private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = helloService.sayHello("dennis");
        }
    }
}

我们new一个HelloWorldService ,并调用sayHello方法,将结果显示在label上
4.执行ctr+F5
c4.BMP
c5.BMP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 ASP.Net Core 中使用 Serilog

记录日志的一个作用就是方便对应用程序进行跟踪和排错调查&#xff0c;在实际应用上都是引入 日志框架&#xff0c;但如果你的 日志文件 包含非结构化的数据&#xff0c;那么查询起来将是一个噩梦&#xff0c;所以需要在记录日志的时候采用结构化方式。将日志结构化可以更容易的…

看国外女神级程序员,直播写代码一年的感悟

我第一次直播写代码是在去年七月份。我想要直播一下我在业余时间内为开源项目领域所做的工作&#xff0c;尽管在youtube上的大部分直播都是关于游戏的。我比较擅长于NodeJS的硬件库方面的工作&#xff08;尽管大部分项目都是自己的&#xff09;。并且我在youtube上曾经开启过一…

windows制作定时关机脚本_自动关机、自动打开程序… 让Windows自动执行任何操作...

文章转载于网络&#xff0c;侵删Windows 中有一个非常棒的功能&#xff0c;叫做“任务计划程序”&#xff0c;但是因为它的界面看起来有点复杂&#xff0c;导致很少有人使用它。其实对于任何人而言&#xff0c;“任务计划程序”都是非常棒的工具&#xff0c;它可以让 Windows 在…

techempower拿分系列之aspcore分析

techempower是一个Web Framework Benchmarks测试平台&#xff0c;世界上各大Web框架都参与其中&#xff0c;当然BeetleX也不例外。接下来的几篇文章中讲述aspcore使用怎样的方式在这评测中获取相对比较高的分数&#xff1b;而BeetleX使用了这些技巧之后也在是近测中获取的前10&…

mysqlbinlog工具_mysqlbinlog命令详解 Part 1-实验环境准备

前面的一些章节我们对mysqldump常用命令进行了讲解这个专题的内容为mysqlbinlog命令的详解mysqlbinlog是mySQL中用来处理binlog的工具1. MySQL二进制日志介绍服务器的binlog包含一些event这些event描述了数据库内容的状态&#xff0c;包含了数据修改&#xff0c;服务器重启等&a…

是学习Java还是Python?一张图告诉你!

Java 和 Python 一直都是两种很火很强大的编程语言&#xff0c;对于刚开始起步学习编程的同学来说&#xff0c;会迷惑且最经常问的问题是&#xff0c;我该学 Java 还是 Python&#xff0c;是不是 Python 容易学&#xff0c;或是应该先学什么编程语言等等这样的问题。作为一名 J…

Java游戏吉他英雄_《吉他英雄:现场》《摇滚乐队4》横向对比:各有所长!

《吉他英雄&#xff1a;现场》《摇滚乐队4》横向对比&#xff1a;各有所长&#xff01;2015-11-29 10:29:07来源&#xff1a;界面编辑&#xff1a;评论(0)作为摇滚游戏界两大支柱&#xff0c;最近回归的《吉他英雄&#xff1a;现场(Guitar Hero Live)》(以下简称GHL)和《摇滚乐…

_云计算学习路线图素材课件,Linux中软件安装的方式

很多初学者感觉云计算就是一个听起来比较高大上的名词&#xff0c;每次想要了解它的时候都像是雾里看花&#xff0c;迷迷糊糊看不真切&#xff0c;至于它是干什么的就更不了解了&#xff0c;其实云计算学起来在IT行业中还是比较容易上手的&#xff0c;接下来我给大家分享Linux中…

Redis集群搭建很easy

前言 哨兵模式虽然让读写分离更加高可用&#xff0c;但单台服务器由于本身的内存和CPU瓶颈&#xff0c;对于高并发和大数据业务的应用场景还是远远不能满足&#xff1b;对于这种情况&#xff0c;有点经验的小伙伴会毫不犹豫的想到集群&#xff0c;搞他好几个节点&#xff0c;负…

国庆中秋活动——读完这两套书,宝宝就变小小物理学家了!

通知&#xff01;通知&#xff01;通知&#xff01;&#xff01;&#xff01;玩酷屋十一黄金优惠限时限量秒杀活动&#xff0c;能抢到算你厉害&#xff1a;1、活动期间 2017/10/02 22:30 ——2017/10/05 22:302、【宝宝的物理学】第一辑 原价&#xff1a;189元&#xff0c;秒…

java的正则表达式 CPU_小心踩雷!一个小小的正则表达式竟把CPU拖垮......

原标题&#xff1a;小心踩雷&#xff01;一个小小的正则表达式竟把CPU拖垮......“前几天线上一个项目监控信息突然报告异常&#xff0c;上到机器上后查看相关资源的使用情况&#xff0c;发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具&#xff0c;我们导出了出问题…

欲善其事,先利其器 | IDCF第6期DevOps案例研究回顾(附视频)

2021年&#xff0c;会有哪些“意想不到”在等待我们&#xff1f;2021年&#xff0c;会有哪些“变与不变”在等待我们&#xff1f;这些&#xff0c;都未可知。借假修真&#xff0c;唯一可知的是过去有哪些值得我们借鉴与学习&#xff0c;并帮助我们更好前进的经验。2021年开端&a…

电脑任务管理器快捷键_电脑知识小常识

0、计算机专业的学生的电脑常识未必有你多&#xff0c;电脑坏了找他们没用。1、重启。不管啥问题&#xff0c;上来就是重启。2、找一个学过计算机的来重启。3、还不行就让那个学过计算机的给你重装个系统。4、再不行就换个电脑吧。5、妹子可以忽视以上规则&#xff0c;直接找计…

大数据迁徙图:逃离北上广,他们竟然去了这里!

“做出这个决定&#xff0c;我们考虑了很久。”不久前&#xff0c;高铭离开了工作生活12年的北京&#xff0c;举家回到故乡重庆。“重庆房价比北京便宜得多&#xff0c;孩子上学的问题也好解决。”高铭的经历并非个案。最近几年&#xff0c;“逃离北上广”成为经久不衰的热门话…

内存缓存MemoryCache

内存缓存MemoryCache实现了ICache接口&#xff0c;Redis同样实现了ICache接口&#xff0c;两者在缓存操作上达到了高度抽象统一。应用设计时一律使用ICache接口&#xff0c;开发环境装配为MemoryCache&#xff0c;生产环境根据分布式需要可以装配为Redis。如果应用系统没有分布…

quicktype游戏java程序_使用QuickType工具从json自动生成类型声明代码

一、QuickType 工具功能简介QuickType 是一款可以根据 json 文本生成指定语言(如 Type Script&#xff0c;C&#xff0c;,Java&#xff0c;C#&#xff0c;Go 等)类型声明代码的工具。例如我们在写接口调用处理收到响应数据的逻辑时一般分为如下两步&#xff1a; 1.根据接口返回…

endpointimpl怎么填参数_这是一篇VLOOKUP函数家族主要用法的合集,XLOOKUP来了!真香!但是,没有office365吃不着怎么办?...

最近这几个月&#xff0c;XLOOKUP震惊了Excel界&#xff0c;传言三头六臂无所不能&#xff0c;一个人把LOOKUP全家兄弟姐妹的活都给抢了。最开始我是不以为意的&#xff0c;但是相关的信息越来越多&#xff0c;我终于忍不住&#xff0c;今天去买了一套office365&#xff0c;发现…

1个月教你学会用Python实现机器学习

什么是机器学习&#xff1f;在最简单的层面上&#xff0c;机器学习只是优化数学方程式的过程。有几种不同的机器学习&#xff0c;都有不同的目的。机器学习中最流行的两种形式是监督学习和无监督的学习。 我们将在下面介绍他们的工作原理&#xff1a;. 监督学习&#xff1a;监督…

ASP.NET Core 5 在IIS,Nginx,Caddy下的性能测试

点击上方蓝字关注“汪宇杰博客”导语ASP.NET Core 从 2.2 版本起&#xff0c;在 IIS 下可以使用 InProcess 模式提高性能&#xff0c;国外大神 Rick Strahl 对此有一片详细的文章。3年过去了&#xff0c;现在 ASP.NET Core 已经到了 5.0 版本&#xff0c;不同服务器之间的性能有…

sql两个表查不同数据_产品操作MySQL第6篇 – 数据过滤-WHERE子句

MYSQL本资料为产品岗位作为日常工作参考&#xff0c;语言口语化At 2019/4/26 By David.Yang如何使用限定条件来进行数据过滤&#xff1f;在前问当中&#xff0c;我们已经学会到了SELECT查询&#xff0c;在过程当中多次接触了WHERE这个关键词&#xff0c;打过预防针应该知道他就…