直接代码POST数据调用WebService

原文:直接代码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来调用时经常会出现一些莫名其妙的问题(两者标准不一样,不兼容)折腾很久得不到解决,所以只能出此下策了。

 

时间: 2024-10-01 20:00:14

直接代码POST数据调用WebService的相关文章

android ksoap2调用webservice android端代码应该怎么写 跪求!

问题描述 android ksoap2调用webservice android端代码应该怎么写 跪求! 这是我在别人那里拔下来的代码 可以连接webservice 我想修改成可以返回数据库数据的 webservice已经可以实现查询数据库 只是在这我不会改 求求你们帮帮我 在线等 如果可以我发红包感谢 谢谢大家了 package com.bang.testwebservicecall; import java.io.IOException; import java.util.Dictionary

jQuery调用WebService返回JSON数据及参数设置注意问题_实用技巧

.NET Framework 3.5的发布解决了WebService调用中json问题,本文将介绍jQuery调用基于.NET Framework 3.5的WebService返回JSON数据,另外还要介绍一下用jQuery调用WebService的参数设置及设置不当所出现的问题,还有出现问题的原因 jQuery调用WebService网上的介绍也比较多,最近的项目中我也用到不少,一直都很少用.NET Ajax,比较钟情于jQuery调用请求WebService有几种方法,这主要说一下POST与

ajax跨域调用webservice的实现代码_javascript技巧

最近ajax访问webservice遇到跨域的问题,网上搜索资料,总结如下(很多都是觉得人家总结不错的复制下来) <<用JSON来传数据,靠JSONP来跨域>> 先上我的已实现代码: 前端代码: $.ajax({ type: "get", url: "http://localhost/Service1.asmx/getElevatorStatusJsonData?jsoncallback=?", dataType: "jsonp&q

PHP调用Webservice实例代码_php技巧

它是一个开源软件,是完全采用PHP语言编写的.通过HTTP收发SOAP消息的一系列PHP类,由NuSphere Corporation(http://dietrich.ganx4.com/nusoap/ )开发.NuSOAP的一个优势是不需要扩展库的支持,这种特性使得NuSoap可以用于所有的PHP环境,不受服务器安全设置的影响. 方法一:直接调用 复制代码 代码如下: <? include('NuSoap.php'); // 创建一个soapclient对象,参数是server的WSDL $c

web service-ajax带参数调用webService时的发送数据问题

问题描述 ajax带参数调用webService时的发送数据问题 如图,ajax带参数调用webService时的发送数据时为什么是 var poststr = "name=" + $("text1").value;而不是 var poststr = $("text1").value 解决方案 ajax调用webservice问题jquery中通过ajax调用webservice传递数组参数的问题 解决方案二: 前面那个是拼装的参数,因为你后台是

Jquery + Ajax调用webService实例代码(asp.net)_jquery

webService中要实现ajax调用,则要加这句代码: // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释. [System.Web.Script.Services.ScriptService] 代码下载 /201008/yuanma/WebService2.rar 复制代码 代码如下: //无参数调用 $(document).ready(function() { $('#btn1').click(function() { $.ajax({ typ

jQuery调用WebService的实现代码_jquery

一个例子说尽: 1..aspx中: 复制代码 代码如下: <div class="button" id="btn1"><a href="#">HelloWorld</div> <div class="button" id="btn2"><a href="#">传入参数</a></div> <div

PHP调用Webservice两种实现代码

OK 现在我们来体验webservice  代码如下 复制代码 //server端 serverSoap.php $soap = new SoapServer(null,array('uri'=>"http://192.168.1.179/"));//This uri is your SERVER ip. $soap->addFunction('minus_func');                                                 //R

php中创建和调用webservice接口示例

  这篇文章主要介绍了php中创建和调用webservice接口示例,包括webservice基本知识.webservice服务端例子.webservice客户端例子,需要的朋友可以参考下 作为开发者来讲,要想写webservice接口或者调用别人的webservice接口,首先需要了解什么是webservice.简单说, WebService就是一些站点开放一些服务出来, 也可以是你自己开发的Service, 也就是一些方法, 通过URL,指定某一个方法名,发出请求,站点里的这个服务(方法),