1.搭建简单界面
这个场景是从HoloToolkit的InputManagerTest场景,删除显示元素,只留下Canvas,修改成的。
2.写代码
using HoloToolkit.Unity.InputModule;
using UnityEngine;
using UnityEngine.UI;
public class WCFTest : MonoBehaviour, IInputClickHandler
{
public Dropdown IpList;
public Text Text;
public void OnInputClicked(InputClickedEventData eventData)
{
Write("WCFTest.OnInputClicked:" + IpList.options[IpList.value].text);
}
private void Write(string msg)
{
try
{
Debug.Log(msg);
Text.text += msg + "\n";
}
catch (System.Exception ex)
{
Debug.LogError(ex.ToString());
Text.text += ex.ToString() + "\n";
}
}
}
3.将以前测试WCF用的脚本、接口类、dll文件拷贝进来
相应的修改一下WCFTest
using HoloToolkit.Unity.InputModule;
using UnityEngine;
using UnityEngine.UI;
using WCFDataAccess.Interfaces;
public class WCFTest : MonoBehaviour, IInputClickHandler
{
public Dropdown IpList;
public Text Text;
public void OnInputClicked(InputClickedEventData eventData)
{
try
{
WCFClientFactory.Instance.Ip = IpList.options[IpList.value].text;
Write("WCFTest.OnInputClicked:" + IpList.options[IpList.value].text);
WCFClientFactory.Instance.Client.SendString("OnInputClicked");
}
catch (System.Exception ex)
{
Write(ex.ToString());
}
}
private void Write(string msg)
{
Debug.Log(msg);
Text.text += msg + "\n";
}
}
3.打包SLN
4.添加服务引用(要先启动服务端)
http://localhost:8000/CommonService
http://localhost:8000/SQLServerService
http://localhost:8000/DeviceDataService
我在添加完服务引用后,有一次重新生成SLN,服务引用没有了,但是添加的文件夹还在,虽然不在项目中,添加到项目中后也能用,不过右键更新服务的功能没有了。
5.UWP项目添加WCF相关代码
6.修改脚本中使用WCF
using System;
using HoloToolkit.Unity.InputModule;
using UnityEngine;
using UnityEngine.UI;
using WCFDataAccess.Interfaces;
public class WCFTest : MonoBehaviour, IInputClickHandler
{
public Dropdown IpList;
public Text Text;
public void OnInputClicked(InputClickedEventData eventData)
{
try
{
WCFClientFactory.Instance.Ip = IpList.options[IpList.value].text;//设置Ip地址
Write("WCFTest.OnInputClicked:" + IpList.options[IpList.value].text);
WCFClientFactory.Instance.Client.SendString("WCFTest.OnInputClicked");
WCFClientFactory.Instance.Client.GetData("id1","name1", data =>
{
try
{
WCFClientFactory.Instance.Client.SendString("DataText:" + data.Id);
//必须先在场景中添加TaskManager脚本
TaskManager.Instance.AddTask(data2 =>
{
Write("DataText:" + data2.Id);
}, data);
}
catch (Exception ex)
{
WriteAsync(ex.ToString());
}
});
}
catch (Exception ex)
{
Write(ex.ToString());
}
}
private void Write(string msg)
{
Debug.Log(msg);
_msg += msg + "\n";
Text.text = _msg;
}
private string _msg;
private bool _isDirty = false;
private void WriteAsync(string msg)
{
_msg += msg + "\n";
}
void Update()
{
if (_isDirty)
{
Text.text = _msg;
_isDirty = false;
}
}
}
7.结果,可以获取数据。