之前调用 webservice 都是直接添加服务引用,然后调用 webservice 方法的,最近发现还可以使用 http 请求调用 webservice。这里还想说一句,还是 web api 的调用简单。
webservice 服务端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class webservicedemo : system.web.services.webservice
{
[webmethod]
public string helloworld()
{
return "hello world" ;
}
[webmethod]
public string sum( string param1, string param2)
{
int num1 = convert.toint32(param1);
int num2 = convert.toint32(param2);
int sum = num1 + num2;
return sum.tostring();
}
}
|
很简单的代码,只是用于演示。
客户端调用代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
class program
{
static void main( string [] args)
{
program program = new program();
string url = "http://localhost:12544/webservicedemo.asmx" ;
string method = "sum" ;
string num1 = "1" ;
string num2 = "2" ;
string result = program.httppostwebservice(url, method, num1, num2);
console.writeline(result);
console.readkey();
}
public string httppostwebservice( string url, string method, string num1, string num2)
{
string result = string .empty;
string param = string .empty;
byte [] bytes = null ;
stream writer = null ;
httpwebrequest request = null ;
httpwebresponse response = null ;
param = httputility.urlencode( "param1" ) + "=" + httputility.urlencode(num1) + "&" + httputility.urlencode( "param2" ) + "=" + httputility.urlencode(num2);
bytes = encoding.utf8.getbytes(param);
request = (httpwebrequest)webrequest.create(url + "/" + method);
request.method = "post" ;
request.contenttype = "application/x-www-form-urlencoded" ;
request.contentlength = bytes.length;
try
{
writer = request.getrequeststream(); //获取用于写入请求数据的stream对象
}
catch (exception ex)
{
return "" ;
}
writer.write(bytes, 0, bytes.length); //把参数数据写入请求数据流
writer.close();
try
{
response = (httpwebresponse)request.getresponse(); //获得响应
}
catch (webexception ex)
{
return "" ;
}
#region 这种方式读取到的是一个返回的结果字符串
stream stream = response.getresponsestream(); //获取响应流
xmltextreader reader = new xmltextreader(stream);
reader.movetocontent();
result = reader.readinnerxml();
#endregion
#region 这种方式读取到的是一个xml格式的字符串
//streamreader reader = new streamreader(response.getresponsestream(), encoding.utf8);
//result = reader.readtoend();
#endregion
response.dispose();
response.close();
//reader.close();
//reader.dispose();
reader.dispose();
reader.close();
stream.dispose();
stream.close();
return result;
}
}
|
第一种读取方式的返回结果:
第二种读取方式的返回结果:
ps:如果遇到调用时报错,可以尝试在服务端(即webservice)的 web.config 配置中添加如下配置节点。
1
2
3
4
5
6
7
|
< system.web >
< webservices >
< protocols >
< add name = "httppost" />
</ protocols >
</ webservices >
</ system.web >
|
参考:C#使用Http Post方式传递Json数据字符串调用Web Service
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。