调用webservice(调用webservice出错是什么意思)

http://www.itjxue.com  2023-02-25 05:06  来源:未知  点击次数: 

怎么调用webservice服务

写一个WINDOWS服务定期调用webservice中的方法。

1、先建一个WebService(ASP.NET Web 服务应用程序)

2、建这个WebService的虚拟目录

3、执行生成一个文件

{

C:\Program Files\Microsoft Visual Studio 8\VCwsdl /language:C# /out:c:\myProxyClass.cs

这个工具(方法)是针对一个webservice生成一个能动态调用的类

language:C#-----C#语言输出

c:\myProxyClass.cs-----这个是生成的文件存在本地的文件名和路径

-----是虚拟目录运行时的地址

}

4、创建一个windows服务程序(新建项目-左侧选windows-右侧选windows服务),然后把生成的文件引入到windows服务的程序中

5、写调用事件(BeginImportUFData)

6、完成后编译生成一下,这时就会在此windows服务程序的bin文件夹下生成一个exe文件(如:MyNewService.exe

)

7、按以下方式安装

安装:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe 绝对路径\MyNewService.exe

卸载:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -u 绝对路径\MyNewService.exe

例如:(用dos命令窗口执行)

安装:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe E:\chengxu\MyNewService\MyNewService\bin\Debug\MyNewService.exe

【然后显示:正在安装程序集,最后显示:“提交”阶段成功完成】

卸载:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -u E:\chengxu\MyNewService\MyNewService\bin\Debug\MyNewService.exe

【最后提示:卸载完成】

启动、停止服务是window操作,找到管理--服务 操作

forest调用webservice

用java实现web services必须遵循两个规范,他们分别是:

? JSR 101:用于基于XML的RPC ,Remote Procedure Call、 的Java API 、Java

API for XML based RPC, JAX-RPC,

? JSR 109:实现企业Web服务。Implementing Enterprise Web services。两个规范提供了厂商的实现的一致性和互操作性需求。

JAX-RPC——Java到XML和XML到Java映射API

JAX-RPC为基于XML的远程过程调用。Remote Procedure Call、 RPC,和Java应用程序编程接口 、Java Application Programming Interface。 API, 、

? WSDL到Java和Java到WSDL映射,例如、将WSDL端口类型映射到Java服

务端点接口 ,Java Service Endpoint Interface、 SEI。 。

? XML数据类型到Java数据类型和Java数据类型到XML数据类型映射。包括简

单类型、复杂类型和数组。

除了XML映射之外, JAX-RPC还定义了服务器端编程模型和API。 AX-RPC 1. 1根据Web 服务互操作性组织、Web Services Interoperability organization、 WS-I。基本概要版本1.0 、Basic Profile version 1.0,添加了互操作性需求。

JSR 109——J2EE环境的API

JSR 109指定了Java 2 Enterprise Edition ,J2EE、环境的Web服务编程模型和体系结构。 JSR 109构建在SOAP 1. 1和WSDL 1. 1的基础上、它涵盖了J2EE环境中JAX-RPC 的使用, 图2, 。它还定义了J2EE应用程序服务器中的部署模型。 JSR 109的客户端编程模型符合JAX-RPC。

JAX-RPC 1. 1和JSR 109是J2EE 1.4的组成部分。

1/7页

在这里我不准备描述用java如何实现服务端,仅描述如何用java作为客户端如何调用web services。

获取客户端服务

Java客户端有两种获取方式、一种是基于容器管理的、一种不是基于容器管理的。基于容器管理的、可以是不同类型的J2EE容器管理的客户机,

? 应用程序客户机容器客户机

? Web容器客户机。 JavaBean或Servlet

? EJB容器客户机、 EJB

他们通过jndi查找服务。一般是两个步骤:

1,实例化本地JND I上下文。

2、在此上下文中对Web服务进行JND I查找。

Context ic = new InitialContext() ;

Service service = (Service) ctx. lookup("java:comp/env/service/HelloService") ;然后可以使用获得的服务接口 。Service Interface,来获取静态存根、动态代理或DII Call对象,来实现我下面描述的三种调用方式。

不是基于容器管理的、就是在本地通过java程序直接调用服务的,服务查找是通过JAX-RPC ServiceFactory进行的、 JAX-RPC ServiceFactory是创建服务访问点的工厂,可以如下进行使用获取服务。javax.xml.rpc.Service service =

ServiceFactory.newInstance() .createService(. . . ) ;

我在下面描述的客户端获取方式都是基于不是容器管理的。java调用webservices

用java作为客户端调用webservices主要有三种方式,下面描述三种调用方式。

1.DLL 、Dynamic Invocation Interface,调用

复杂度最高。灵活性最强的调用方式

通过自己创建Call对象完成调用,此方法的步骤如下,

2/7页

1. 获取一个JAX-RPC Service 。

2. 使用JAX-RPC Service的createCall ()方法实例化JAX-RPC Call 。

3. 使用它的setter方法来配置您的Call实例。

4. 使用JAX-RPC Call的调用方法来调用Web服务的操作。

String namespace = "";

String portName = "Hello";

QName portQN = new QName"(namespace, "portName) ;

String operationName = getGreeting ;

Call call = service.createCall () ;call. setPortTypeName(portQN) ;call. setOperationName(new QName(namespace, operatio"n"Name) ) ;call. setProperty(Call.ENCODINGSTYLE_URI_PROPERTY, ) ;call. setProperty(Ca"ll.OPER"ATION_STYLE_PROPERTY, "wrapped") ;call.addParameter( param1 , xsd:string,ParameterMode. IN) ;call. setReturnType(xsd:string) ;

Object[] inParams = new Object[] {"Jane"} ;

String ret = (String) call. invoke(inParams) ;

使用DII Call接口的优势在于,客户机可以调用远程过程而无需知道开发时的WSDL URI或Web服务操作的签名。这样当Web服务的细节改变时、很容易对代码进行修改。使用DII客户机,不需要像动态代理或静态存根的情形那样由从WSDL到Java的映射工具。Emitter,生成运行时类。然而,如果您知道您想要调用的 Web服务不可能更改,就应该使用动态代理。 因为配置Call实例可能很复杂。

我以调用一个axis的webservices为例说明DLL如何调用。

编写服务端程序Hello package com. lion. service public class Hello {public String sayHello(String name)

{return "hello "+name;

}

}

将上面的程序发布成一个web服务。在web-info\server-config.wsdd文件添加下列描述,service name="Hel"lo" provide"r="java":RPC"

parameter name= className value= com. lion. service .Hello"/

parameter name="allowedMethods" value=" sayHello "/

/service

客户端调用程序如下TestHelloClient. java,import org.apache.axis.client.Call ;

3/7页

import org.apache.axis.client.Service;import javax.xml.namespace.QName;import javax.xml.rpc.ServiceException;import java.net.MalformedURLException;import java.rmi.RemoteException;public class TestHelloClient{public static void main(String[] args) {try {

String endpoint = " ";

Service service = new Service() ;

Call call = null;call = (Call) service.createCall () ;call. setTargetEndpointAddress(new java.net.URL(endpoint) ) ;

//为Call设置服务的位置call. setOperationName( “sayHello” ) ;

String res = (String)" call. invoke(new"Object[] {"lion"} ) ;

System.out.println( return value is + res) ;

} catch (Exception ex) {ex.printStackTrace() ;

}

}

}

2.使用动态代理,Dynamic Proxy、调用

复杂度中等、灵活性中等的调用方式

您可以使用代理从JAX-RPC Service中调用Web服务的操作。代理是实现SEI (服务端点接口 Service Endpoint Interface)的Java类。获得代理使用的是JAX-RPC Service 的getPort()方法,它接受您想要调用的Web服务的端口的名称,存在于WSDL文档中。以及代理实现的SEI。它之所以称为动态是因为该代理是在运行时创建的。动态代理客户机的步骤如下、

1. 获取一个JAX-RPC Service 。

2. 使用JAX-RPC Service的getPort()方法来获得一个代理以调用Web服务的操

作。

String namespace = "";

String portName = "Hello";

QName portQN = new QName(namespace, portName) ;

4/7页

Hello myProxy = service.getPort(portQN, Hello.class) ;

System.out.println(myProxy.getGreeting("Jane") ) ;

这是所有您为了使用动态代理方法调用Web服务而需要编写的代码。使用这种方法的优势在于您可以编写可移植的、厂商无关的代码。然而、您需要知道开发时的WSDL URL、并且需要在运行之前根据WSDL文档运行您的从WSDL到Java的映射工具。如果您没有这方面的信息,或者WSDL URL很可能改变、那么您应该改为使用DII方法。

仍以上面发布的hello服务为例子。下面是动态代理的调用代码。

编写客户端代理接口

//这里声明的方法一定要和服务端程序的方法名称和参数相同。最好类名也一样//而且必须继承java.rmi.Remote接口public interface HelloClientInterface extends java.rmi.Remote {public String sayHello (String name) throws java.rmi.RemoteException;}

编写并执行客户端程序TestHelloClient. java import javax.xml.rpc.Service;import javax.xml.rpc.ServiceFactory;import java.net.URL;import javax.xml.namespace.QName;public class TestHelloClient {public static void main(String[] args) {try

{

String wsdlUrl = " ";//wsdl描述

String nameSpaceUri = " ";//wsdl描述里面的服务命名空间

String serviceName = "HelloService";// wsdl描述里面发布的服务名称

String portName = "Hello";//wsdl描述里面面发布的服务里面的port名称

ServiceFactory serviceFactory = ServiceFactory.newInstance() ;

Service afService = serviceFactory.createService(new URL(wsdlUrl) ,new QName(nameSpaceUri, serviceName) ) ;

HelloClientInterface proxy = (HelloClientInterface)afService.getPort(new QName(nameSpaceUr"i, portName) , Hel"loClientInterface."clas"s) ;

System.out.println( return value is +proxy. sayHello( lion ) ) ;

}catch(Exception ex)

{ex.printStackTrace() ;

}

如何调用别人提供的webservice接口

在项目中选择【控制台应用程序】,点击项目右键,选择添加-服务引用。在地址栏中输入WebServie链接地址后回车,点击确定后在代码中就可以看到添加的服务应用了,详细步骤:

1、首先打开VS2013,选择文件-新建-项目。

2、在项目中选择【控制台应用程序】,将项目名称重新命名为【WebServiceTest】。

3、点击项目右键,选择添加-服务引用。

4、在地址栏中输入WebServie链接地址后回车,然后重新命名服务名称为【ServiceGetWeather】,点击确定后在代码中就可以看到添加的服务应用了。

5、然后在代码中添加如下代码,调用webservice,获取接口返回的数据,呈现出来。

6、这是运行的结果,可以看出接口返回了一个xml格式的数据。

如何调用webservice

一、WebService在cs后台程序中的调用

A、通过命名空间和类名直接调用

示例:

WebService ws = new WebService();

string s = ws.HelloWorld();

B、通过添加WEB引用的方式调用,首先添加WEB引用,通过URL指向WEBSERVICE,

指定WEB引用名,假设为KK;

示例:

kk.WebService n = new kk.WebService();

string ss=n.HelloWorld();

二、WebService在前台页面的JS 调用方法

1、首先通过下面的方法把Webservice在前台引用进来

asp:ScriptManager runat="server"

Services

asp:ServiceReference Path="WebService.asmx" InlineScript="True" /

/Services

/asp:ScriptManager

2、然后就可以通过JS程序进行调用,示例如下:

script type="text/jscript"

function a()

{

WebService.HelloWorld(onresult);

}

//这里的onresult是回调函数

function onresult(result)

{

alert(result);

}

function b()

{

WebService.add(1,2,onreturn)

}

function onreturn(result)

{

alert(result);

}

//下面的'context'是上下文,可以通过回到函数通过重载的方式获得;

function c()

{

WebService.div(1,1,onresultC,onerror,'context');

}

function onresultC(res,c)

{

alert(res);

alert(c);

}

//onerror是获得异常信息的回调函数,下面给出了获得异常信息的方法

function onerror(error)

{

var a="";

a=String.format("获取服务器端异常的具体类型:{0}\t\n获取详细的异常描述信息:{1}\t\n获取造成异常的:{2}\t\n获取服务器端异常的堆栈

跟踪信息:{3}\t\n获取一个布尔值,表示异常是否是由于网络连接超时造成的{4}",

error.get_exceptionType(),

error.get_message(),

error.get_statusCode(),

error.get_stackTrace(),

error.get_timedOut())

alert(a);

}

a();

b();

c();

/script

如何调用webservice接口

webservice主要是一些站点为咱们写好了的方法,供咱们调用,当然也可以自己去编写自己的webservice, 所以首先得找到这样的接口。看一些站点有没有这样的接口。

下面咱们就拿一个简单的天气预报接口。先把天气预报接口的地址输入地址栏: ( 。36wu。com/weatherService.asmx 这个是例子,实际中根据个人需要修改)

会出现一些带有链接的方法名和参数说明之类的。看完之后,然后进链接可以看到测试,可以先把想测试的参数写进去,点击调用,会出现一个xml文件,这些就是得到的结果,依情况而定咱们出把结果处理成想要的就可以了。

下面说一下怎么在项目中调用:新建一个web项目,然后点击添加引用服务如图,然后点击确定。

这样就会发现在webconfig文件里面多了一下节点,而且项目类中的Service References文件件多了一个绿色的东西。可以点击看看他有哪些方法,应该是和咱们在浏览器输入链接的方法是一致的,剩余就是怎么调用了。下面给出具体的代码:本代码值在webForm中先添加Lable、TextBox、Button以及Literal各一个。然后点击按钮。

protected void Button1_Click(object sender, EventArgs e)

{

if (!string.IsNullOrEmpty(this.TextBox1.Text))

{

WeatherService.WeatherWebServiceSoapClient service = new WeatherService.WeatherWebServiceSoapClient();

String[] strWeatherInfo = service.getWeatherbyCityName(this.TextBox1.Text);

StringBuilder str = new StringBuilder("");

str.AppendLine("您查看天气信息如下:");

foreach (string info in strWeatherInfo)

{

str.AppendLine(info+"br/");

}

this.Literal1.Text =str.ToString();

}

}

运行程序, 就看到效果了。

安卓怎么调用webservice

具体调用调用webservice的方法为:

(1) 指定webservice的命名空间和调用的方法名,如:

SoapObject request =new SoapObject(,”getName”);

SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第二个参数表示要调用的WebService方法名。

(2) 设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下:

Request.addProperty(“param1”,”value”);

Request.addProperty(“param2”,”value”);

要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。

(3) 生成调用Webservice方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述,代码为:

SoapSerializationEnvelope envelope=new

SoapSerializationEnvelope(SoapEnvelope.VER11);

Envelope.bodyOut = request;

创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第一步创建的SoapObject对象。

(4) 创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL:

HttpTransportSE ht=new HttpTransportSE(“SearchNewsService?wsdl”);

(5)使用call方法调用WebService方法,代码:

ht.call(null,envelope);

Call方法的第一个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象。

(6)使用getResponse方法获得WebService方法的返回结果,代码:

SoapObject soapObject =( SoapObject) envelope.getResponse();

以下为简单的实现一个天气查看功能的例子:

复制代码

publicclass WebService extends Activity {

privatestaticfinal String NAMESPACE ="";

// WebService地址

privatestatic String URL ="weatherwebservice.asmx";

privatestaticfinal String METHOD_NAME ="getWeatherbyCityName";

privatestatic String SOAP_ACTION ="getWeatherbyCityName";

private String weatherToday;

private Button okButton;

private SoapObject detail;

@Override

publicvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

okButton = (Button) findViewById(R.id.ok);

okButton.setOnClickListener(new Button.OnClickListener() {

publicvoid onClick(View v) {

showWeather();

}

});

}

privatevoid showWeather() {

String city ="武汉";

getWeather(city);

}

@SuppressWarnings("deprecation")

publicvoid getWeather(String cityName) {

try {

System.out.println("rpc------");

SoapObject rpc =new SoapObject(NAMESPACE, METHOD_NAME);

System.out.println("rpc"+ rpc);

System.out.println("cityName is "+ cityName);

rpc.addProperty("theCityName", cityName);

AndroidHttpTransport ht =new AndroidHttpTransport(URL);

ht.debug =true;

SoapSerializationEnvelope envelope =new SoapSerializationEnvelope(

SoapEnvelope.VER11);

envelope.bodyOut = rpc;

envelope.dotNet =true;

envelope.setOutputSoapObject(rpc);

ht.call(SOAP_ACTION, envelope);

SoapObject result = (SoapObject) envelope.bodyIn;

detail = (SoapObject) result

.getProperty("getWeatherbyCityNameResult");

System.out.println("result"+ result);

System.out.println("detail"+ detail);

Toast.makeText(WebService.this, detail.toString(),

Toast.LENGTH_LONG).show();

parseWeather(detail);

return;

} catch (Exception e) {

e.printStackTrace();

}

}

privatevoid parseWeather(SoapObject detail)

throws UnsupportedEncodingException {

String date = detail.getProperty(6).toString();

weatherToday ="今天:"+ date.split("")[0];

weatherToday = weatherToday +"\n天气:"+ date.split("")[1];

weatherToday = weatherToday +"\n气温:"

+ detail.getProperty(5).toString();

weatherToday = weatherToday +"\n风力:"

+ detail.getProperty(7).toString() +"\n";

System.out.println("weatherToday is "+ weatherToday);

Toast.makeText(WebService.this, weatherToday,

Toast.LENGTH_LONG).show();

}

}

(责任编辑:IT教学网)

更多
上一篇:没有了

推荐CGI/Perl教程文章