直接代码POST数据调用WebService

简介: 原文:直接代码POST数据调用WebServiceps:使用过webservice的童鞋大概都明白它是基于Soap协议交换数据的,同时Soap协议是对HTTP协议的扩展,其实我们就可以认为调用一个WEB服务就是通过http协议GET或POST数据的过程,只不过中间的输入/输出数据是遵守Soap协议格式的标准XML。
原文: 直接代码POST数据调用WebService

ps:使用过webservice的童鞋大概都明白它是基于Soap协议交换数据的,同时Soap协议是对HTTP协议的扩展,其实我们就可以认为调用一个WEB服务就是通过http协议GET或POST数据的过程,只不过中间的输入/输出数据是遵守Soap协议格式的标准XML。明白这个道理之后我们就可以通过构造请求数据来模拟调用WEB服务的过程了,具体代码如下:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Encoding encoding = Encoding.UTF8;
            string responseData = String.Empty;            

            WebRequest request = HttpWebRequest.Create("http://localhost:32100/Service1.svc");
            string param =  "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\" xmlns:wcf=\"http://schemas.datacontract.org/2004/07/WcfService2\">"
                            +"   <soapenv:Header/>"
                            +"   <soapenv:Body>"
                            +"      <tem:GetDataUsingDataContract>"
                            +"         <!--Optional:-->"
                            +"         <tem:composite>"
                            +"            <!--Optional:-->"
                            +"            <wcf:BoolValue>true</wcf:BoolValue>"
                            +"            <!--Optional:-->"
                            +"            <wcf:StringValue>ddd</wcf:StringValue>"
                            +"         </tem:composite>"
                            +"      </tem:GetDataUsingDataContract>"
                            +"   </soapenv:Body>"
                            +"</soapenv:Envelope>";
            byte[] bs = System.Text.ASCIIEncoding.ASCII.GetBytes(param);

            request.Method = "POST";
            request.ContentType = "text/xml;charset=UTF-8";
            request.ContentLength = bs.Length;

            //指定要调用http://localhost:32100/Service1.svc服务中的GetDataUsingDataContract方法
            //http://tempuri.org/IService1/GetDataUsingDataContract(名称空间(http://tempuri.org/)/接口名称(IService1)/方法名(GetDataUsingDataContract))
            request.Headers["SOAPAction"] = "http://tempuri.org/IService1/GetDataUsingDataContract"; 


            using(Stream reqStream = request.GetRequestStream())
            {
                reqStream.Write(bs, 0, bs.Length);
                reqStream.Close();
            }

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                using (StreamReader reader = new StreamReader(response.GetResponseStream(), encoding))
                {
                    responseData = reader.ReadToEnd().ToString();
                }
                Console.Write(responseData);
                Console.ReadKey();
            }


        }
    }
}

 

当然,上面的例子完全是对请求数据进行硬编码,实际使用还得根据实际情况调整和封装。下图是调用后的结果,就是一堆符合SOAP格式的XML,至于怎么解析我就不说了。

 

这里还有一点要提一下的是如何抓取WEBService的请求信息,我是通过SoapUI这个工具来获取的。(没使用过SoapUI???请教度娘吧。。。)

 

编写此文的目的:JAVA开发的WebService通过.NET来调用时经常会出现一些莫名其妙的问题(两者标准不一样,不兼容)折腾很久得不到解决,所以只能出此下策了。

 

目录
相关文章
|
JSON 数据格式
okhttp3 模拟get、post(json参数传递,form表单提交)
本文是博主学习okhttp3 的记录,希望对大家有所帮助。
1550 0
|
9月前
HTTP请求处理 get/post工具类 验证网络DEMO
HTTP请求处理 get/post工具类 验证网络DEMO
38 0
|
10月前
|
Web App开发 网络协议 安全
GET和POST两种基本请求方法的区别
GET和POST两种基本请求方法的区别
|
XML 前端开发 JavaScript
如何使用代码来构造HTTP请求?
如何使用代码来构造HTTP请求?
如何使用代码来构造HTTP请求?
|
JavaScript 前端开发 API
09事件传递参数-封装网络请求api get和post合并整合在一起
09事件传递参数-封装网络请求api get和post合并整合在一起
|
C# 数据格式 XML
C# 使用 HttpPost 请求调用 WebService
原文:C# 使用 HttpPost 请求调用 WebService 之前调用 WebService 都是直接添加服务引用,然后调用 WebService 方法的,最近发现还可以使用 Http 请求调用 WebService。
2771 0
|
XML 数据格式 网络架构
httpclent调用webservice
httpclent调用 webservice   wsdl后缀服务 1.jar包: commons-logging-1.
1509 0