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

 

以下是一个基于 Node.js 和 Vue.js 的 SOAP WebService 示例: 首先,在 Node.js 中使用 `soap` 模块来创建一个 SOAP WebService: ```javascript const express = require('express'); const soap = require('soap'); // 创建一个 express 应用程序 const app = express(); // 定义一个简单SOAP WebService const service = { MyService: { MyServiceSoap: { MyMethod: function(args) { return { result: "Hello " + args.name }; } } } }; // 将 WebService 注册到 express 应用程序中 const wsdlPath = '/myservice?wsdl'; app.listen(8000, function() { soap.listen(app, wsdlPath, service, function() { console.log(`Server started at http://localhost:8000${wsdlPath}`); }); }); ``` 上述代码中,我们使用 `soap` 模块创建了一个简单SOAP WebService,该 WebService 包含一个名为 `MyMethod` 的方法,该方法接收一个参数 `name`,并返回一个结果对象,其中包含一个 `result` 属性,其值为 `Hello ${name}`。 然后,在 Vue.js 中使用 `axios` 模块来调用该 SOAP WebService: ```vue <template> <div> <input v-model="name" /> <button @click="callWebService">Call WebService</button> <p v-if="result">{{ result }}</p> </div> </template> <script> import axios from 'axios'; import parseString from 'xml2js'; export default { data() { return { name: '', result: '' }; }, methods: { callWebService() { const soapMessage = `<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://example.com/"> <soapenv:Header/> <soapenv:Body> <ser:MyMethod> <ser:name>${this.name}</ser:name> </ser:MyMethod> </soapenv:Body> </soapenv:Envelope>`; const headers = { 'Content-Type': 'text/xml;charset=UTF-8', 'SOAPAction': 'MyMethod' }; axios.post('http://localhost:8000/myservice', soapMessage, { headers: headers }) .then(response => { parseString(response.data, (err, result) => { if (err) { console.error(err); return; } this.result = result['soap:Envelope']['soap:Body'][0].MyMethodResponse[0].result[0]; }); }) .catch(error => { console.error(error); }); } } } </script> ``` 上述代码中,我们使用 `axios` 模块向刚才创建的 SOAP WebService 发送了一个名为 `MyMethod` 的方法调用请求,该请求包含一个 `name` 参数。接着,我们使用 `xml2js` 模块将服务端返回的 XML 格式的响应消息解析为 JavaScript 对象,并从中提取出服务端返回的结果值,以在页面上显示出来。 以上就是一个基于 Node.js 和 Vue.js 的 SOAP WebService 示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值