美文网首页unity游戏开发我爱编程
在unity 调用WebService的soap接口方法总结

在unity 调用WebService的soap接口方法总结

作者: aa33804e6280 | 来源:发表于2018-04-14 12:59 被阅读28次

在unity 调用WebService的soap接口方法总结:
1,wsdl工具
2,www的post方法

第一种在iOS无法发布(Android和PC都可以),第二种亲测可以在iOS模拟器上运行
第一种,wsdl工具法:
第1步:在unity安装目录下:
Editor\Data\Mono\lib\mono\2.0文件夹下找到system.web.dll和system.web.services.dll这两个文件,将其复制到unity的工程plugins文件夹下
第2步:用控制台cd到wsdl工具的目录(一般unity自带一个wsdl工具在Editor\Data\Mono\lib\mono\2.0下面)
按照下面的格式输入命令:

wsdl.exe +webservice地址 1523678644(1).jpg
然后去这个路径下找到你对应的c#脚本了,脚本名字是根据webservice那边的命名空间来定义的
把脚本复制到unity即可直接调用,这种调用简单省事

第二种,在www的post方法:
这种方式要求服务器支持post调用
这种方式参考了这篇文章:
https://www.cnblogs.com/fyluyg/p/6047819.html
根据服务器soap版本不同需要稍作修改

后期会整理好上传一个完整的demo到GitHub:GitHub:https://github.com/busclass/flager.git
下面是代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
using System.Text;
using System;
public class WebService : MonoBehaviour {

    // Use this for initialization
    void Start () {
        //调用方法
        StartCoroutine (IESendImgToServer("json参数1","参数1","你的webservice地址","参数1"));
    }
    //接收到的数据之后的回调方法
    public System.Action<string> getXmlCallBackEvent;
    void GetXmlCallBack(string _xml){

        if (getXmlCallBackEvent!=null) {
            getXmlCallBackEvent (_xml);
        }
    }
    //发送数据到服务器
    IEnumerator IESendImgToServer(string jsonStr ,string jkID,string url ,string jksqm  )
    {
        StringBuilder soap = new StringBuilder();
          
        //25行的action是方法名
        soap.Append ("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
        soap.Append ("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">");
        soap.Append ("<soap:Body>"); 
        soap.Append("<ns2:action xmlns:ns2=\"http://impl.cxf.hstt.com/\">");//方法名,命名空间
        soap.Append("<arg0>" + jksqm + "</arg0>");
        soap.Append("<arg1>" + jkID + "</arg1>"); 
        soap.Append ("<arg2>" + jsonStr + "</arg2>");
        soap.Append("</ns2:action>");
        soap.Append("</soap:Body>");
        soap.Append("</soap:Envelope>");

        string _url = url;
        //      if (ServerInfo.instance.URL!=null) {
        //          url = ServerInfo.instance.URL;
        //      } 
        if (url==string.Empty) 
        {
            _url = "你的webservice地址"; 
        }
        WWW w = new WWW(_url, Encoding.UTF8.GetBytes(soap.ToString()));  

        yield return w;
        if (w.isDone) {
            if (w.error != null) 
            {
                Debug.Log (w.error );
            } 
            else
            {
                Debug.Log (w.text);
                string xmlMsg= ParsingXml (w.text); 
                GetXmlCallBack (xmlMsg); 
            }
        } 
    } 

    /// <summary>
    /// Parsings the xml.
    /// </summary>
    /// <param name="_xml">Xml.</param>
    /// <param name="_type">Type.</param>
    private string  ParsingXml(string _xml)
    { 
        XmlDocument xmlDoc = new XmlDocument();
        try 
        {
            xmlDoc.LoadXml(_xml);
        } 
        catch (Exception ex) 
        { 
            Debug.Log (ex.Data); 
        }

        XmlNode arrOfStr = xmlDoc.DocumentElement;
        XmlNodeList childNode = null;

        #region SOAP
        xmlDoc.LoadXml(arrOfStr.InnerXml);
        arrOfStr = xmlDoc.DocumentElement;
        xmlDoc.LoadXml(arrOfStr.InnerXml);
        arrOfStr = xmlDoc.DocumentElement;
        xmlDoc.LoadXml(arrOfStr.InnerXml);
        arrOfStr = xmlDoc.DocumentElement; 
        childNode = arrOfStr.ChildNodes;
        #endregion
        return arrOfStr.InnerXml;
    }
}

相关文章

网友评论

    本文标题:在unity 调用WebService的soap接口方法总结

    本文链接:https://www.haomeiwen.com/subject/mnakkftx.html