本文提要
==============本文主要内容
前阵子接触到了Web Service,VS在通用化的路上也是不断努力着。Web Service实现了一台多用的省心效果——支持跨平台应用;还可以脱离传统的Json语句来传数据。不过本文并不介绍Web Service,有兴趣请自行百度(我就当大家了解了这个Web Service)。言归正传,接下来为大家介绍如何在Unity中应用Web Service的两种方法,实现两者之间的通讯,后面在补充一个Xml文件的配合使用,实现能够外部修改访问的网站。
==============支持原创
参考原文:Link1-=-=LInk2-=-=Link3-=-=Link4
上述文章零零散散的描述了WebService在Unity中使用的相关内容,一开始了解时候也是云里雾里,后来自己摸索了才明白如何实现。
本文属于个人总结学习内容,有些东西也是直接从大神那边搬砖过来,都不知道在哪里搬的了,还请见谅。
==============新手总结,有问题请评论指教
开始学习
一、WWW 模式来调用编写好的Web Service。
==假设你已经设计好自己的Web Service 网站了 网站为:http://10.10.10.10:8888/test.asmx(随便写的网站) 。
www其实就是传统老办法,不清楚的请先自行了解下。直接用www来读取一个返回的文本就行了(最好在协程中用),我就直接偷懒了——上图。(读取过程就不描述了,根据自我需求)(注意返回的数据属于xml格式,这是webservice的特点)
具体使用的细节
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的关键。
VS来生成 .cs文件(只介绍其中一种实用较好的方法)
这里需要多个步骤来实现,主要就是利用VS自带的工具来实现。这里有点复杂,要慢点操作(原文在此,这里感谢前辈的探索)(贴上前辈的步骤图)
1、在VS中新建相应的工具
解释: wsdl.exe 就是vs提供的工具,利用此工具得到我们想要的cs 文件
参数栏就是你输出时的位置与命名。
2、用工具生成我们需要的cs
3、将生成的.cs文件直接拖拽至Unity
重点这里要注意命名空间,因为命名空间是后面我要使用的
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方法,可以重写。
结尾
WebService 还是一个十分实用的工具,以前都是用传统的Json 来完成数据传输,也不知道两种速度上是否有区别,不过经过实战,还是Webservice更符合编程习惯,用起来顺手很多。
本人首篇博文,其实很多都是前辈们写的,只不过拿来用,然后结合了自己的需求,发现里面小小的利用空间,还请大家海涵。后面有新的作品再跟大家分享了。
溜了 溜了 溜了