
在本文中,将解释如何在 Unity 引擎中调用 WCF 服务,首先在控制台应用程序中创建一个简单的 WCF 服务和主机,也可以为 WCF 服务选择其他托管选项,例如 IIS 托管。
本文使用的IDE/引擎: Visual studio 专业版,unity 个人版
创建WCF服务
首先,在 visual studio 中创建一个新项目,选择 WCF 模板并创建 WCF 服务库项目,将项目名称写为 WcfDemo。

加载项目后,选择 IService1.cs 文件并按如下方式编辑代码:
using System;
using System.ServiceModel;
namespace WcfDemo
{
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(string name, int value);
}
}
更改 Service1.cs 如下:
using System;
using System.ServiceModel;
namespace WcfDemo
{
public class Service1 : IService1
{
public string GetData(string name, int value)
{
return string.Format("Hello {0}; You entered: {1}", name, value);
}
}
}
在 WcfDemo 解决方案中添加另一个项目,该项目将是一个控制台应用程序,并将被命名为 Host。

在 Host 控制台应用程序中提供 WcfDemo WCF 项目的引用,在 Host 项目中打开配置文件 app.config,编辑代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
</startup>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="myBehaviour">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WcfDemo.Service1" behaviorConfiguration="myBehaviour">
<endpoint address="WcfDemoService" binding="basicHttpBinding" contract="WcfDemo.IService1"></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
修改宿主工程中 program.cs 的代码如下:
using System;
using System.ServiceModel;
namespace Host
{
class Program
{
static void Main(string[] args)
{
using (ServiceHost serviceHost = new ServiceHost(typeof(WcfDemo.Service1)))
{
serviceHost.Open();
Console.WriteLine("WcfDemo service started");
Console.ReadLine();
}
}
}
}
将 Host 设置为启动项目并运行应用程序,就会得到这样的输出。

如果收到有关无法访问 8080 端口的错误,请关闭 visual studio 并以管理员身份再次运行它。
在浏览器中打开 http://localhost:8080/,确保 Host 应用程序正在运行,然后将打开一个页面,如下所示:

在这里可以看到哪个服务正在端口 8080 上运行,单击 svcutil.exe 旁边的链接,它将在浏览器中打开一个 xml 文件,这个 URL 将用于为正在运行的服务生成代理类。
在Unity中调用WCF服务
要在 Unity 中调用 WCF 服务,需要生成 WCF 服务的第一个代理类,要生成代理类,将使用 svcutil 工具。
要使用此工具,请转至 Unity 安装目录并根据项目的脚本运行时版本遵循下面提到的路径:
编辑 → 项目设置 → 播放器 → 其他设置 → 配置。
脚本运行时版本 | Svcutil 路径 |
.NET 3.5 等 | ../Editor/Data/Mono/lib/mono/2.0 |
.NET 4.X 等(Unity 2018 及更高版本) | ../编辑器/数据/MonoBleedingEdge/lib/mono/4.5 |
在此目录中,将找到 svcutil.exe 文件。
以管理员身份打开命令窗口,如上一步所述导航目录路径并运行以下命令
svcutil -out:WcfDemoServiceClient.cs http://localhost:8080/?wsdl
确保命令行中的 WCF 服务 URL 正确,此命令将在 svcutil 工具所在的同一目录中生成 WcfDemoServiceClient.cs 文件,这个生成的文件将成为 Unity 中 WCF 服务的代理类。
更改 Unity 中的 API 兼容性设置,请转到播放器设置(文件 → 构建设置 → 播放器设置),展开其他设置并根据项目的脚本运行时版本设置 API 兼容级别。
脚本运行时版本 | API 兼容级别 |
.NET 3.5 等 | ../Editor/Data/Mono/lib/mono/2.0 |
.NET 4.X 等 | ../编辑器/数据/MonoBleedingEdge/lib/mono/4.5 |

在项目层次结构下的 Assets 目录中创建脚本文件夹,复制脚本目录中的WcfDemoServiceClient.cs,如图所示:

在名为 callService.cs 的 Script 目录中创建一个新的脚本文件,在场景中创建一个空的游戏对象并将此脚本添加到这个空的游戏对象中,编辑 callService.cs 如下:
using UnityEngine;
using System.ServiceModel;
public class callService : MonoBehaviour {
void Start () {
Service1Client client = new Service1Client(new BasicHttpBinding(), new EndpointAddress("http://localhost:8080/WcfDemoService"));
string receviedString = client.GetData("shekhar", 10);
Debug.Log(receviedString);
}
}
运行 Unity,能看到控制台输出为如下所示:

…
以上是3D天堂关于如何在Unity3D 中调用 WCF 服务的全部内容,如果你有任何反馈,请随时在本页面下方留言。