SOAP简单示例

看了网上的几个文章,SOAP的示例布局都不清晰,不能马上入手,特意写个例子与大家分享,同时记录备用。

当前环境:VS2013 + WPF

private void Button_Click(object sender, RoutedEventArgs e)
        {
            string url = "http://www.webxml.com.cn/WebServices/WeatherWS.asmx";
            string soap = SetSoapMessage();// 构造soap请求信息

            string result = GetSOAPReSource(url, soap);

            txtShow.Text = result.Replace(">", ">\n").Replace("<string>\n", "<string>");
        }

        #region 发起SOAP请求
        /// <summary>
        /// 发起SOAP请求
        /// </summary>
        /// <param name="url">URL</param>
        /// <param name="datastr">数据</param>
        /// <returns></returns>
        public static string GetSOAPReSource(string url, string datastr)
        {
            //发起请求
            Uri uri = new Uri(url);
            WebRequest webRequest = WebRequest.Create(uri);
            webRequest.ContentType = "text/xml; charset=utf-8";
            webRequest.Method = "POST";
            using (Stream requestStream = webRequest.GetRequestStream())
            {
                byte[] paramBytes = Encoding.UTF8.GetBytes(datastr.ToString());
                requestStream.Write(paramBytes, 0, paramBytes.Length);
            }

            //响应
            WebResponse webResponse = webRequest.GetResponse();
            using (StreamReader myStreamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
            {
                string result = "";
                return result = myStreamReader.ReadToEnd();
            }
        }
        #endregion

        #region 构造soap请求信息
        string SetSoapMessage()
        {
            string header = "";
            string body = "";
            string fault = "";

            body = "<getRegionCountry xmlns=\"http://WebXml.com.cn/\" />";

            return GetSoapMessageByBase(header, body, fault);
        }
        #endregion

        #region SOAP消息基本结构
        /// <summary>
        /// SOAP消息基本结构
        /// </summary>
        /// <param name="header">头部(包含Header)</param>
        /// <param name="body">内容主体(包含Body)</param>
        /// <param name="fault">错误提示(包含Fault)</param>
        /// <returns></returns>
        string GetSoapMessageByBase(string header, string body, string fault)
        {
            StringBuilder soap = new StringBuilder();
            soap.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            soap.Append("<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">");
            //添加头部
            if (!string.IsNullOrWhiteSpace(header))
            {
                soap.Append("<soap:Header>");
                soap.Append(header);
                soap.Append("</soap:Header>");
            }
            //添加内容
            if (!string.IsNullOrWhiteSpace(body))
            {
                soap.Append("<soap:Body>");
                soap.Append(body);

                //添加错误
                if (!string.IsNullOrWhiteSpace(fault))
                {
                    soap.Append("<soap:Fault>");
                    soap.Append(fault);
                    soap.Append("</soap:Fault>");
                }

                soap.Append("</soap:Body>");
            }

            soap.Append("</soap:Envelope>");

            return soap.ToString();
        }
        #endregion
时间: 2024-11-10 00:53:52

SOAP简单示例的相关文章

Web API 简单示例

原文:Web API 简单示例 一.RESTful和Web API Representational State Transfer (REST) is a software architecture style consisting of guidelines and best practices for creating scalable web services. REST is a coordinated set of constraints applied to the design o

AMQP消息队列之RabbitMQ简单示例

前面一篇文章讲了如何快速搭建一个ActiveMQ的示例程序,ActiveMQ是JMS的实现,那这篇文章就再看下另外一种消息队列AMQP的代表实现RabbitMQ的简单示例吧.在具体讲解之前,先通过一个图来概览下: 1.添加Maven依赖 <!-- rabbitmq begin --> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit

HMM的维特比算法简单示例

今天读了一位大牛的关于HMM的技术博客,读完之后,写了一个关于维特比算法的简单示例,用scala和java语言混合编写的.现在上传之. package com.txq.hmm import java.utilimport scala.collection._ /** * HMM维特比算法,根据显示状态链条估计隐式链条 * @param states 隐式states * @param observations 显式states * @param start_probability 初始概率向量

spring-servlet.xml简单示例

spring-servlet.xml简单示例 某个项目中的spring-servlet.xml 记下来以后研究用 1 <!-- springMVC简单配置 --> 2 <?xml version="1.0" encoding="UTF-8"?> 3 <beans xmlns="http://www.springframework.org/schema/beans" 4 xmlns:xsi="http://w

关于Ajax实现的简单示例

一.代码示例 关于Ajax的基本概念(包括XMLHttpRequest对象及其相关方法属性)移步这里(w3school中文版)学习了解. <!doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title>使用Ajax异步加载数据</title> <script type = "text/javasc

【转】bind简单示例

bind简单示例代码 namespace { class placeholder_ {}; placeholder_ __1; } template <typename R, typename T, typename Arg> class simple_bind_t { private: typedef R (T::*F)(Arg); F f_; T* t_; Arg& a_; public: simple_bind_t(F f, T* t, Arg &a) : f_(f),

SQL左连接、右连接和内连接的简单示例

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录: right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录: inner join(等值连接) 只返回两个表中联结字段相等的行:举例如下: -------------------------------------------- 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a20050113 4 a20050114 5 a20050115 表B记录

Backbone简单示例

要的资源: <script type="text/javascript" src="../dep/underscore-1.6.0.min.js"></script> <script type="text/javascript" src="../dep/jquery-1.11.1.min.js"></script> <script type="text/javas

动态网站开发技术学习2:VS 2010制作作第一个简单示例网站

制作一个简单示例网站的步骤: 一,启动VS 2010开发环境,选择菜单中的"文件",选择其中的"新建",再选择"网站",会弹出"新建网站"对话框. 二,在"新建网站"的对话框,在"已安装模板"中选择Visual C#,右侧的选择"ASP.NET网站"选项,单击"新建网 站"中的"文件系统",下拉菜单中有"文件系统&qu