webservice实例,webservice实现
一道简单的webservice编程
if (TextBox1.Text!= "")
{
TextBox2.Text = WebserviceInstance.change1(double.Parse(TextBox1.Text.Trim())).ToString();
}
if (TextBox3.Text != "")
{
TextBox4.Text = WebserviceInstance.change2(double.Parse(TextBox3.Text.Trim())).ToString();
}
}
试下
如何调用webservice接口中的方法
webservice主要是一些站点为我们写好了的方法,供我们调用,当然我们也可以自己去编写自己的webservice,本文主要是通过一个小的实例,去如何调用webservice。下面先给出几个常用的webservice的调用地址。
下面我们就拿一个简单的天气预报接口。先把天气预报接口的地址输入地址栏:会出现一些带有链接的方法名和参数说明之类的。看完之后,然后进链接可以看到测试,可以先把我们想测试的参数写进去,点击调用,会出现一个xml文件,这些就是得到的结果,依情况而定我们出把结果处理成我们想要的就可以了。
下面说一下怎么在项目中调用:新建一个web项目,然后点击添加引用服务如图,然后点击确定。
这样就会发现在webconfig文件里面多了一下节点,而且项目类中的Service References文件件多了一个绿色的东西。可以点击看看他有哪些方法,应该是和我们在浏览器输入链接的方法是一致的,剩余就是怎么调用了。下面给出具体的代码:本代码值在webForm中先添加Lable、TextBox、Button以及Literal各一个。然后点击按钮。
运行程序,输入查看的城市:点击按钮如图所示:
C#使用PHP服务端的Web Service通信实例
这篇文章主要介绍了C#使用PHP服务端的Web
Service通信实例,需要的朋友可以参考下
注:本例中构建Web
Service采用SOAP方式,通过php插件NuSoap来搭建SOAP服务器。
代码如下:
?
require_once("lib/nusoap.php");
//调用NuSoap
$server
=
new
soap_server();
//创建soap服务端
$server-configureWSDL("login_service");
//配置WSDL
$namespace
=
"";
$server-wsdl-schemaTargetNamespace
=
$namespace;
//设置wsdl命名空间为
$server-register(
//
注册Web服务
'login_verifiy',
//定义名称
array('name'='xsd:string','pw'='xsd:string'),
//接受参数
array('return'='xsd:string'),
//返回
$namespace,
//命名空间
false,
//
soapaction:默认
'rpc',
//
类型:
rpc
or
document
'encoded',
//
参数:encoded(编码)或
literal(文字)
'A
web
method
of
login'
//描述
);
$POST_DATA
=
isset($GLOBALS['HTTP_RAW_POST_DATA'])?
$GLOBALS['HTTP_RAW_POST_DATA']
:
'';
$server-service($POST_DATA);
//将提交的数据传递给soap服务
function
login_verifiy($user,$pw)
{
//服务执行内容,本示例中为显示输入的帐号密码
return
'user:'.$user.'
password:'.$pw);
}
?
C#客户端调用:
代码如下:
[DllImport("kernel32")]
//调用api函数读ini文件。返回值为字符串缓冲区的长度
private
static
extern
long
GetPrivateProfileString(string
section,
string
key,
string
def,
StringBuilder
retVal,
int
size,
string
filePath);
private
void
Form1_Load(object
sender,
EventArgs
e)
{
StringBuilder
temp
=
new
StringBuilder(256);
GetPrivateProfileString("system",
"url",
null,
temp,
256,
System.IO.Directory.GetCurrentDirectory()+"config.ini");
//通过读取config.ini配置文件(结构见附加内容)来获取webservice
url
Program.server_url
=
temp.ToString();
//Program.cs中的全局变量server_url用以储存webservice
url
}
private
void
button1_Click(object
sender,
EventArgs
e)
{
WebReference.login_service
l
=
new
WebReference.login_service();
string
s=l.login_verifiy(username.Text,
password.Text);
MessageBox.Show(s);
}
附config.ini内容:
代码如下:
[system]
url=
如何使用C#创建WebService
C#学习到一定程度会涉及到C#创建WebService的一些高阶知识,本文试图对此做一个简单的介绍。
假设A是客户端,B是webservice服务端,用户通过http协议向服务器发送soap请求,webservice返回客户端Xml格式的数据。
现在我们看一看创建一个C#创建WebService的大致过程:
服务端的webservice是必须要建的。中间的soap,Xml我们不用去关心,在客户端这边,比较重要的是如何从webservice取得对象?答案是用的是proxy对象。客户端由代理对象(proxy)负责与webservice的通信。所以在客户端使用webservice,完全和使用一个本地对象是一样的。
我们现在以一个简单的C#创建WebService实例来说明。
打开vs.Net,新建工程(asp.Net ?web服务),在位置中键入http。//localhost/webserver,其中webserver就是工程的名字。确定后,出现一个Service1.asmx.cx,双击,出现代码窗口,
using ?System; ? using ?System.Collections; ? using ?System.ComponentModel; ? using ?System.Data; ? using ?System.Diagnostics; ? using ?System.Web; ? using ?System.Web.Services; ? namespace ?webserver ? { ? /// ? ? /// ?Service1 ?的摘要说明。 ? /// ? ? (1) ? public ?class ?Service1 ?: ? ?System.Web.Services.WebService ? { ? public ?Service1() ? { ? //CODEGEN:该调用是 ?ASP.Net ?Web ? ?服务设计器所必需的 ? InitializeComponent(); ? } ? #region ?Component ?Designer ?generated ?code ? //Web ?服务设计器所必需的 ? private ?IContainer ?components ?= ?null; ? /// ? ? /// ?设计器支持所需的方法 ?- ? ?不要使用代码编辑器修改 ? /// ?此方法的内容。 ? /// ? ? private ?void ?InitializeComponent() ? { ? } ? /// ? ? /// ?清理所有正在使用的资源。 ? /// ? ? protected ?override ?void ?Dispose ?( ?bool ?disposing ?) ? { ? if(disposing ? ?components ?!= ?null) ? { ? components.Dispose(); ? } ? base.Dispose(disposing); ? } ? #endregion ? // ?WEB ?服务示例 ? // ?HelloWorld() ?示例服务返回字符串 ?Hello ?World ? // ?若要生成,请取消注释下列行,然后保存并生成项目 ? // ?若要测试此 ?Web ?服务,请按 ?F5 ?键 ? // [WebMethod] ? // public ?string ?HelloWorld() ? // { ? // return ?"Hello ?World"; ? // } ? } ? } ? 下面在(1)处加入
[WebService(Namespace="http。//localhost/webserver/")]
这是因为soap是基于http协议上的,客户端无法知道webservice位于那个服务器上。在实际应用中,比如http。//www。ourfly。com上放置这个webservice,则Namespace改为http。//www。ourfly。com/webserver.
下面我们给这个webservice添加一个方法。
// [WebMethod] ? // public ?string ?HelloWorld() ? // { ? // return ?"Hello ?World"; ? // } ? 微软帮我们写好了一个,接着添加一个方法。 ?方法名称叫show. ? [WebMethod] ? public ?string ?show(string ?yourname) ? { ? return ?“http。//www。ourfly。com”+”欢迎”+yourname; ? } ? 现在,就可以运行了,按F5,点击show,输入你的名字, ?然后点击invote 看到了吧。 ? 〈 ?Xml ?version="1.0" ?encoding="utf-8" ??〉 ? ? 〈 string ?Xmlns="http。//tempuri。org/"〉 ?http。//www。ourfly。com欢迎yyg〈 /string〉 ?成功了。打开bin目录,Vs.Net已经将proxy做好了.webserver.dll.
现在我们在不同的环境下测试:
1.打开vs.Net,新建”windows应用程序”工程,命名为Client,增加按钮,文本框。
现在要用到代理了,右键单击右边的reference(引用),选择”添加引用”,选择浏览,找到webserver目录下的bin目录下的webserver.dll
再加入一个system.web.webservices的引用,在列表中有。
在form1.cs里,加入
using System.Web.Services;
using webserver;
然后在
private ?System.Windows.Forms.Button ?button1;
private ?System.Windows.Forms.TextBox ?textBox1;
后面,插入
private ?webserver.service1 ?Client
建立一个service1的实例。双击按钮,代码如下:
private ?void ?button1_Click ?(object ?sender, ?System.EventArgs ?e) ? { ? Client ?=new ?Service1(); ? string ?name; ? name=Client.show("龙卷风.Net"); ? textBox1.Text=name; ? } ? 按F5,运行工程,点击按钮,文本框中显示 http。//www。ourfly。com欢迎龙卷风.Net
2. Asp.Net ?web窗口的测试
方法与上面的一模一样,添加引用,建立service1的实例 在此不在细说。
3.在VB中测试
这个就要相对来说复杂一些 ,首先在VB中建立一个”标准EXE”的工程。添加引用:Microsoft ?Soap ?Type ?library。
注意:如果没有安装Microsoft ?Soap ?Toolkit,是没有这个类型库的。
webservice 怎么调用
ava调用WebService可以直接使用Apache提供的axis.jar自己编写代码,或者利用Eclipse自动生成WebService Client代码,利用其中的Proxy类进行调用。理论上是一样的,只不过用Eclipse自动生成代码省事些。
1、编写代码方式:
package com.yudun.test;
import java.rmi.RemoteException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.message.PrefixedQName;
import org.apache.axis.message.SOAPHeaderElement;
import com.cezanne.golden.user.Exception;
import com.cezanne.golden.user.UserManagerServiceProxy;
import javax.xml.namespace.QName;
import java.net.MalformedURLException;
import javax.xml.rpc.ServiceException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPException;
public class testWebService {
public static String getResult() throws ServiceException, MalformedURLException, RemoteException, SOAPException
{
//标识Web Service的具体路径
String endpoint = "WebService服务地址";
// 创建 Service实例
Service service = new Service();
// 通过Service实例创建Call的实例
Call call = (Call) service.createCall();
//将Web Service的服务路径加入到call实例之中.
call.setTargetEndpointAddress( new java.net.URL(endpoint) );//为Call设置服务的位置
// 由于需要认证,故需要设置调用的SOAP头信息。
Name headerName = new PrefixedQName( new QName("发布的wsdl里的targetNamespace里的url", "string_itemName") );
org.apache.axis.message.SOAPHeaderElement header = new SOAPHeaderElement(headerName);
header.addTextNode( "blablabla" );
call.addHeader(header);
// SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("发布的wsdl里的targetNamespace里的url", "SoapHeader");
// soapHeaderElement.setNamespaceURI("发布的wsdl里的targetNamespace里的url");
// try
// {
// soapHeaderElement.addChildElement("string_itemName").setValue("blablabla");
// }
// catch (SOAPException e)
// {
// e.printStackTrace();
// }
// call.addHeader(soapHeaderElement);
//调用Web Service的方法
org.apache.axis.description.OperationDesc oper;
org.apache.axis.description.ParameterDesc param;
oper = new org.apache.axis.description.OperationDesc();
oper.setName("opName");
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg0"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg1"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "arg2"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("", "string"), java.lang.String.class, false, false);
param.setOmittable(true);
oper.addParameter(param);
oper.setReturnType(new javax.xml.namespace.QName("", "string"));
oper.setReturnClass(java.lang.String.class);
oper.setReturnQName(new javax.xml.namespace.QName("", "return"));
oper.setStyle(org.apache.axis.constants.Style.WRAPPED);
oper.setUse(org.apache.axis.constants.Use.LITERAL);
oper.addFault(new org.apache.axis.description.FaultDesc(
new javax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url", "Exception"),
"Exception",
new javax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url", "Exception"),
true
));
call.setOperation( oper );
call.setOperationName(new javax.xml.namespace.QName("发布的wsdl里的targetNamespace里的url", "opName"));
//调用Web Service,传入参数
String res = ( String ) call.invoke( new Object[]("arg0","arg1"));
System.out.println("===============");
return res;
}
/**
* @param args
*/
public static void main(String[] args) {
try {
System.out.println(getResult());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
} catch (SOAPException e) {
e.printStackTrace();
}
}
}
2、利用Eclipse自动生成WebService client代码就容易多了:(由于还不会发图片,就用语言描述了,大家酬和看吧。。。)
首先,new project,选择other,在输入框中输入Web Service Client,选中搜索后的结果,点击Next,在Service definition中输入 WebService的发布地址,点击Finish
这样,WebService Client代码已经生成好了。
接下来写一个Test类,在main函数中输入如下代码:
String endpoint = "服务器的WebService的地址";
YourWebServiceNameProxy umsp = new YourWebServiceNameProxy (endpoint);
try {
String resultStr = umsp.opMethod("arg0","arg1");
System.out.println(resultStr);
} catch (Exception e) {
System.out.println("异常");
e.printStackTrace();
} catch (RemoteException e) {
System.out.println("RemoteException异常");
e.printStackTrace();
}