在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下面)
按照下面的格式输入命令:
然后去这个路径下找到你对应的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;
}
}
网友评论