ue3d在Unity中如何调用WCF服务

在Unity中如何调用WCF服务

分类:
ue3d - 在Unity中如何调用WCF服务

在本文中,将解释如何在 Unity 引擎中调用 WCF 服务,首先在控制台应用程序中创建一个简单的 WCF 服务和主机,也可以为 WCF 服务选择其他托管选项,例如 IIS 托管。

本文使用的IDE/引擎: Visual studio 专业版,unity 个人版

创建WCF服务

首先,在 visual studio 中创建一个新项目,选择 WCF 模板并创建 WCF 服务库项目,将项目名称写为 WcfDemo

ue3d - 在Unity中如何调用WCF服务

加载项目后,选择 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。

ue3d - 在Unity中如何调用WCF服务

在 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 设置为启动项目并运行应用程序,就会得到这样的输出。

ue3d - 在Unity中如何调用WCF服务

如果收到有关无法访问 8080 端口的错误,请关闭 visual studio 并以管理员身份再次运行它。

在浏览器中打开 http://localhost:8080/,确保 Host 应用程序正在运行,然后将打开一个页面,如下所示:

ue3d - 在Unity中如何调用WCF服务

在这里可以看到哪个服务正在端口 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
ue3d - 在Unity中如何调用WCF服务

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

ue3d - 在Unity中如何调用WCF服务

在名为 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,能看到控制台输出为如下所示

ue3d - 在Unity中如何调用WCF服务

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

相关信息

  • 类型:知识
  • 字数:825
  • 字符:4676
  • 适用软件:Unity
  • 说明:无
  • 编号:153974

热门内容

提示:3D天堂作为服务提供者,尊重网络版权及知识产权,对某些行为的发生不具备充分的监控能力,若无意间侵犯到您的权利,请 联系我们,我们会在收到信息后尽快给予处理。

本站文章版权归本站自创作者所有,未经允许不得转载!