Unity3D开发之调用webservice

当我们软件在点击进入的时候需要刷卡登陆时,需要我们将卡号id发送到数据库进行比对来验证用户是否注册。如果我们客户端直接与数据库连接,具有不安全性,容易被破解然后获取到数据库数据。所以在服务器做一个服务程序是最好的选择。而由于客户端不需要实时连接服务器或者服务器上的数据库,所以socket通信有些大材小用。webservice其实就是一次性连接,当我们调用的时候就会和服务创立连接,做完交互后就会自动中断,节约性能。所以webservice就是我们最好的选择。

我们使用asp.net创建出我们的第一个服务。代码内容其实就是输入一个id,去数据库查询是否有此id注册,如果有,则返回注册的名字,如果没有,则返回空。至于webservce的创建在这里就不详细说了。

我们在unity中调用服务,一般使用www加载访问。由于我们要传入参数id,所以我们设定的是Post请求。我们在服务器上打开我们的webservce,在浏览器中可以看到如下界面:

Unity3D开发之调用webservice_第1张图片

上面是输入参数id,下面是各种请求方式的报文,由于我们使用post请求,所以我们只需要查看post请求相关的报文。如下:

Unity3D开发之调用webservice_第2张图片

 我们从报文可以看到我们此服务的地址为:**.**.**.**(服务器ip地址)/WebServiceMain.asmx/GetPlayerName

而返回的报文内容格式为:


string

我们只需要www加载后返回的xml文件解析获取string元素对应的值。

代码如下:

 //所有请求来这发送
    IEnumerator Send(string url, WWWForm form, Callback callback)
    {
        WWW www = new WWW(url, form);

        yield return www;
        string s = "";
        while (!www.isDone)
        {
            yield return null;
        }
        if (!string.IsNullOrEmpty(www.error))
            s = www.error;
        else
        {
            string str = www.text;
            _xml.LoadXml(str); //加载数据
            //XmlNode
            s = _xml.GetElementsByTagName("string")[0].InnerXml;
            //GetElementsByTagName 返回匹配的元素节点及它们的子节点的 NodeList。
        }
        Debug.Log(s);
        if (callback!=null) callback(s);
    }

callback是我们自己声明的回调函数,当获取到值后做出响应。

而我们发送post请求的代码如下:

public void SendLoginRequest(string idval, Callback callback)
    {
        WWWForm form = new WWWForm();
        form.AddField("id", idval);
        StartCoroutine(Send(LoginUrl, form, callback));
	}

以上就是unity在调用webservice获取数据的过程。

你可能感兴趣的:(Unity)