本文提要

==============本文主要内容

前阵子接触到了Web Service,VS在通用化的路上也是不断努力着。Web Service实现了一台多用的省心效果——支持跨平台应用;还可以脱离传统的Json语句来传数据。不过本文并不介绍Web Service,有兴趣请自行百度(我就当大家了解了这个Web Service)。言归正传,接下来为大家介绍如何在Unity中应用Web Service的两种方法,实现两者之间的通讯,后面在补充一个Xml文件的配合使用,实现能够外部修改访问的网站。


==============新手总结,有问题请评论指教

开始学习

一、WWW 模式来调用编写好的Web Service。

==假设你已经设计好自己的Web Service 网站了 网站为:http://10.10.10.10:8888/test.asmx(随便写的网站)

www其实就是传统老办法,不清楚的请先自行了解下。直接用www来读取一个返回的文本就行了(最好在协程中用),我就直接偷懒了——上图。(读取过程就不描述了,根据自我需求)(注意返回的数据属于xml格式,这是webservice的特点)

uniapp Android 调用页面 uniapp调用webservice_xml

具体使用的细节

1、其实自己写Web Service 时候,你就会发现在Web Service 下就是各种方法。所以使用时候,url后面加上“/”+你写的方法,这样就是执行你相应的相应方法。(这里可以去了解webservice相应的书写要求,可以自己用网页测试发现规律)
2、这里主要注意Get和Post两种方法的区别与使用:get 就是获得数据。post就是向webservice 传送数据。

二、利用VS自带的 wsdl工具生成 .cs

本文重点,脱离WWW的困扰,更符合编程简易思想

添加Dll文件

在自己的Unity安装目录下找到支持Web Service开发的两个dll文件——system.web.dll和system.web.services.dll。

然后将两个文件拖至自己创建的 Plugins文件夹中。

解释:两个dll文件就是支持unity使用web service的关键。

uniapp Android 调用页面 uniapp调用webservice_WebService_02

VS来生成 .cs文件(只介绍其中一种实用较好的方法)

这里需要多个步骤来实现,主要就是利用VS自带的工具来实现。这里有点复杂,要慢点操作

1、在VS中新建相应的工具

解释: wsdl.exe 就是vs提供的工具,利用此工具得到我们想要的cs 文件

参数栏就是你输出时的位置与命名。

uniapp Android 调用页面 uniapp调用webservice_Web_03

2、用工具生成我们需要的cs

uniapp Android 调用页面 uniapp调用webservice_WebService_04

3、将生成的.cs文件直接拖拽至Unity

重点这里要注意命名空间,因为命名空间是后面我要使用的

uniapp Android 调用页面 uniapp调用webservice_WebService_05


uniapp Android 调用页面 uniapp调用webservice_xml_06

uniapp Android 调用页面 uniapp调用webservice_WebService_07

4、开始使用——声明命名空间,然后new一个web service即可,上码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TestTest;

public class testforconnect : MonoBehaviour {
	// Update is called once per frame
	void Update () {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            StartCoroutine(ConnectToService());
        }
	}
    IEnumerator ConnectToService()
    {
        TestTest.WebService1 testsss = new WebService1();
        Debug.Log(testsss.HelloWorld());
        Debug.Log(testsss.GetSum(1,3));
        Debug.Log(testsss.Query());
        gameobject gbForUnity= testsss.GetDataFromSql("select * from GameObject Where Name=@Name","Vinegar");
       // testsss.GoldPrice();//用户登录
        Debug.Log(gbForUnity);
        yield return 0;
      
    }
}

三、实现外部修改网站的方法

解释:利用VS 编写的Web Service ,我们还需要在服务器中配置上相应的网站,而在不同的服务器下(局域网应用时),网址也会不同。而客户端(unity)要适应相应的网站,就要实现访问的"url"的可编辑性。
本文提供的解决思路就是在生成的.cs文件中修改,替换其构造函数——上码

public WebService1() {
            //这里读取xml文件来获取相应ip等信息
            string strOfIp = "";
            string pathOfXml = Application.dataPath + "/XmlOfIp.xml";
            if (!File.Exists(pathOfXml))
            {
                UnityEngine.Debug.Log("缺少文档");
                this.Url = "http://localhost";
                return;
            }
            else
            {
                XmlDocument readxml = new XmlDocument();
                readxml.Load(pathOfXml);
                XmlNodeList node = readxml.SelectSingleNode("configuration").ChildNodes;
                foreach (XmlElement item in node)
                {
                    if (item.Name == "connectionString")
                    {
                        if (item.GetAttribute("name") == "dbconnect")
                        {
                            strOfIp = item.InnerText;
                        }
                    }
                }
            }
            this.Url = strOfIp;
        }

四、补充说明

应用上述的第二种方法时,web Service 还给我们带来一个好用的功能——附带设计类。

解释 :这一部分在应用了数据库的连接调用时就会有深刻的体会。在数据库的访问读取时,我们常常读读取一个数据表中某一行数据,若将这行数据当作一个对象来使用时。我们在编写web service 时就需要新建一个对象类来存放相应的数据。而如果我们利用方法二时,生成的CS类直接附带了相应的对象类。方便我们的使用。

注意 这个对象类的有些方法会丢失。如 ToString方法,可以重写。

uniapp Android 调用页面 uniapp调用webservice_Unity_08

结尾

WebService 还是一个十分实用的工具,以前都是用传统的Json 来完成数据传输,也不知道两种速度上是否有区别,不过经过实战,还是Webservice更符合编程习惯,用起来顺手很多。
本人首篇博文,其实很多都是前辈们写的,只不过拿来用,然后结合了自己的需求,发现里面小小的利用空间,还请大家海涵。后面有新的作品再跟大家分享了。
溜了 溜了 溜了