热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WCF怎么绑定netTcpBinding寄宿到控制台应用程序

小编给大家分享一下WCF怎么绑定netTcpBinding寄宿到控制台应用程序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读

小编给大家分享一下WCF怎么绑定netTcpBinding寄宿到控制台应用程序,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

契约

新建一个WCF服务类库项目,在其中添加两个WCF服务:GameService,PlayerService

WCF怎么绑定netTcpBinding寄宿到控制台应用程序

代码如下:

[ServiceContract]
public interface IGameService
{
 [OperationContract]
 Task DoWork(string arg);
}
public class GameService : IGameService
{
 public async Task DoWork(string arg)
 {
  return await Task.FromResult($"Hello {arg}, I am the GameService.");
 }
}
[ServiceContract]
public interface IPlayerService
{
 [OperationContract]
 Task DoWork(string arg);
}
public class PlayerService : IPlayerService
{
 public async Task DoWork(string arg)
 {
  return await Task.FromResult($"Hello {arg}, I am the PlayerService.");
 }
}

服务端

新建一个控制台应用程序,添加一个类 ServiceHostManager

public interface IServiceHostManager : IDisposable
{
 void Start();
 void Stop();
}

public class ServiceHostManager : IServiceHostManager
 where TService : class
{
 ServiceHost _host;

 public ServiceHostManager()
 {
  _host = new ServiceHost(typeof(TService));
  _host.Opened += (s, a) => {
   Console.WriteLine("WCF监听已启动!{0}", _host.Description.Endpoints[0].Address);
  };
  _host.Closed += (s, a) =>
  {
   Console.WriteLine("WCF服务已终止!{0}", _host.Description.Endpoints[0].Name);
  };   
 }
 public void Start()
 {
  Console.WriteLine("正在开启WCF服务...{0}", _host.Description.Endpoints[0].Name);
  _host.Open();
 }
 public void Stop()
 {
  if (_host != null && _host.State == CommunicationState.Opened)
  {
   Console.WriteLine("正在关闭WCF服务...{0}", _host.Description.Endpoints[0].Name);
   _host.Close();
  }
 }
 public void Dispose()
 {
  Stop();
 }

 public static Task StartNew(CancellationTokenSource cancelTokenSource)
 {
  var theTask = Task.Factory.StartNew(() =>
  {
   IServiceHostManager shs = null;
   try
   {
    shs = new ServiceHostManager();
    shs.Start();
    while (true)
    {
     if (cancelTokenSource.IsCancellationRequested && shs != null)
     {
      shs.Stop();
      break;
     }
    }
   }
   catch (Exception ex)
   {
    Console.WriteLine(ex);
    if (shs != null)
     shs.Stop();
   }
  }, cancelTokenSource.Token);

  return theTask;
 }
}

在Main方法中启动WCF主机

class Program
 {
  static Program()
  {
   Console.WriteLine("初始化...");
   Console.WriteLine("服务运行期间,请不要关闭窗口。");
   Console.WriteLine();
  }

  static void Main(string[] args)
  {
   Console.Title = "WCF主机 x64.(按 [Esc] 键停止服务)";
   var cancelTokenSource = new CancellationTokenSource();
   ServiceHostManager.StartNew(cancelTokenSource);
   ServiceHostManager.StartNew(cancelTokenSource);
   while (true)
   {
    if (Console.ReadKey().Key == ConsoleKey.Escape)
    {
     Console.WriteLine();
     cancelTokenSource.Cancel();
     break;
    }
   }
   Console.ReadLine();
  }
 }

服务端配置

在控制台应用程序的App.config中配置system.serviceModel


 
  
  
   
   
   
  
  
  
  
   
   
   
  
  
 
 
  
  
   
   
   
   
   
  
  
 
 
  
  
   
   
   
  
  
   
   
   
  
  
 
 

未避免元数据泄露,部署时将HttpGetEnable设为False

运行控制台应用程序

WCF怎么绑定netTcpBinding寄宿到控制台应用程序按[ESC]键终止服务

WCF怎么绑定netTcpBinding寄宿到控制台应用程序

客户端测试

服务端运行后,用wcftestclient工具测试,服务地址即behavior中配置的元数据GET地址

http://localhost:8081/Wettery/GameService/MetaData

http://localhost:8081/Wettery/PlayerService/MetaData

WCF怎么绑定netTcpBinding寄宿到控制台应用程序

以上是“WCF怎么绑定netTcpBinding寄宿到控制台应用程序”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程笔记行业资讯频道!


推荐阅读
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
author-avatar
游泳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有