接口:

    [ServiceContract(CallbackContract = typeof(IViewCallback), SessionMode = SessionMode.Required)]
public interface IViewService
{
[OperationContract]
void ServiceTest();
}

类:

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class ViewService : IViewService
{
//在ViewLibary中的ViewManager中注册
public event Action<ClientData> ServiceTestEvent;//用于客户端测试与服务端的WCF连接事件
private ClientData GetClientData()
{
OperationContext context = OperationContext.Current;
MessageProperties properties = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
return new ClientData(endpoint.Address, endpoint.Port);
}
void IViewService.ServiceTest()
{
ClientData client = GetClientData();
ServiceTestEvent?.Invoke(client);
}
}
public class ClientData
{
private string _IP;
private int _Port;
public string IP { get { return _IP; } set { _IP = value; } }
public int Port { get { return _Port; } set { _Port = value; } } public ClientData(string ip, int port)
{
_IP = ip;
_Port = port;
}
}

参数定义:

private ServiceHost _WcfHost = null;
private ViewService _MainService = null;
private int _MetaPort = 58942;
private int _DataPort = 58946;
public ServiceHost WcfHost { get { return _WcfHost; } }
public ViewService MainService { get { return _MainService; } }
public int MetaPort { get { return _MetaPort; } }
public int DataPort { get { return _DataPort; } }

初始化服务端:

private void InitialHost()
{
#region TCP
//Uri tcpa = new Uri(string.Format("net.tcp://127.0.0.1:{0}/A/ViewService/", DataPort));
//_WpfHost = new ServiceHost(MainService, tcpa);
//NetTcpBinding tcpb = new NetTcpBinding();
//ServiceMetadataBehavior mBehave = new ServiceMetadataBehavior();
//_WpfHost.Description.Behaviors.Add(mBehave);
//_WpfHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
//_WpfHost.AddServiceEndpoint(typeof(IViewService), tcpb, tcpa);
#endregion
#region HTTP
Uri baseAddress = new Uri(string.Format("http://localhost:{0}/A/ViewService/", MetaPort));
_WcfHost = new ServiceHost(MainService, baseAddress);//MainService用于处理客户端请求
string tcpAddress = string.Format("net.tcp://127.0.0.1:{0}/A/ViewService/", DataPort);
NetTcpBinding tcpBinding = new NetTcpBinding();
tcpBinding.Security.Mode = SecurityMode.None;
ServiceMetadataBehavior mBehave = new ServiceMetadataBehavior();
_WcfHost.Description.Behaviors.Add(mBehave);
WcfHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex");
WcfHost.AddServiceEndpoint(typeof(IViewService), tcpBinding, tcpAddress);
#endregion
ServiceDebugBehavior debugBehavior = WcfHost.Description.Behaviors.Find<ServiceDebugBehavior>();
if (debugBehavior == null)
{
debugBehavior = new ServiceDebugBehavior();
debugBehavior.IncludeExceptionDetailInFaults = true;
WcfHost.Description.Behaviors.Add(debugBehavior);
}
else
{
debugBehavior.IncludeExceptionDetailInFaults = true;
}
}

启动:

private void Main()
{
if (WcfHost.State == CommunicationState.Created)
{
try
{
WcfHost.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}

Winform项目中纯代码创建WCF服务的更多相关文章

  1. STS热部署,springboot项目中修改代码不用重新启动服务

    方法如下: 1.在pom文件中引入  devtools  依赖: <dependency> <groupId>org.springframework.boot</grou ...

  2. WCF入门教程(二)如何创建WCF服务

    WCF入门教程(二)从零做起-创建WCF服务 通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) ...

  3. WCF入门(五)---创建WCF服务

    使用Microsoft Visual Studio2012创建WCF服务,理解如下所有必要的编码,更好地创建WCF服务的概念,这里做一个简单的任务. 启动Visual Studio 2012. 单击新 ...

  4. VS2010中使用Jquery调用Wcf服务读取数据库记录

    VS2010中使用Jquery调用Wcf服务读取数据库记录 开发环境:Window Servere 2008 +SQL SERVE 2008 R2+ IIS7 +VS2010+Jquery1.3.2 ...

  5. WCF入门教程(二)从零做起-创建WCF服务

    通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) 定义了协议,具体什么操作,操作的参数和返回值 ...

  6. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  7. iOS开发 纯代码创建UICollectionView

    转:http://jingyan.baidu.com/article/eb9f7b6d8a81a5869364e8a6.html iOS开发 纯代码创建UICollectionView 习惯了使用xi ...

  8. 快速创建WCF服务和svcutil.exe工具使用

    先简单的创建WCF服务: 系统会自动加上IService1接口 和 Service1 实现类 分别在IService1 和Service1 加上2段代码. [ServiceContract] publ ...

  9. ios - 纯代码创建collectionView

    开始考虑好一点点时间,因为一般的都是用xib,或者storyboard来写的.这次用纯代码...废话较多请看 首先把storyboard干掉,工程里面的main干掉 由于干掉了storyboard则启 ...

  10. C# winform项目中ListView控件使用CheckBoxes属性实现单选功能

    C# winform项目中ListView控件使用CheckBoxes属性实现单选功能 在做项目时需要使用ListView控件的CheckBoxes属性显示,还要在点击行时自动选中CheckBoxes ...

随机推荐

  1. FCOSv2:原作的扩展版本,小修小改,性能高达50.4AP | IEEE T-PAMI 2020

    本文是对FCOS的小修小改,最终性能达到了50.4AP,可谓相当强劲了,大家在工程上可以参考其中的改进以及提升方法   来源:晓飞的算法工程笔记 公众号 论文: FCOS: A Simple and ...

  2. KingbaseES V8R6 最老事务阻止vacuum freeze

    前言 最近生产环境发生几次由于长事务导致表.库年龄没法回收的情况.我们要规避这种情况的发生,不要等发生了再去强制中断会话连接. 当数据库中存在最老事务版本xmin,那么早于他的快照可以被标记为froz ...

  3. 鸿蒙HarmonyOS实战-ArkUI组件(Grid/GridItem)

    一.Grid/GridItem 1.概述 网格布局是一种新型的布局方式,它按照网格来划分页面,通过列和行来定义网格,使得页面的布局更加灵活.简洁.易于维护.网格布局能够将页面分成多个单元格,可以在这些 ...

  4. archlinux修改btrfs文件系统大小出现ERROR: unable to retrieve fs info

    提权sudo就可以了 例: sudo btrfs filesystem resize max /

  5. SQLSERVER 的表分区(水平) 操作记录2

    1        ----(非原创只是自己整理记录!!!)---------------原文地址: https://www.cnblogs.com/libingql/category/184251.h ...

  6. #ST表#CF1879F Last Man Standing

    洛谷题面 CF1879F 分析 当 \(x\) 大于最大值时一定可以被约化为等于的情况,考虑枚举 \(x\), 通过枚举倍数的方式可以知道存在若干段区间消耗同一精神状态的次数是相同的,那么区别就是其精 ...

  7. AtCoder Beginner Contest 240

    前言 考场把前六题切了,但是 E 题和 F 题罚时了,所以也写一写. ABC240 E - Ranges on Tree 题目传送门 分析 \(r\) 的最大值就是叶子的个数,如果将叶子按顺序编号, ...

  8. 【Kotlin】函数

    1 常规函数 1.1 无参函数 fun main() { myFun() } fun myFun() { println("myFun") // 打印: myFun } 1.2 有 ...

  9. 在Keycloak中实现多租户并在ASP.NET Core下进行验证

    Keycloak是一个功能强大的开源身份和访问管理系统,提供了一整套解决方案,包括用户认证.单点登录(SSO).身份联合.用户注册.用户管理.角色映射.多因素认证和访问控制等.它广泛应用于企业和云服务 ...

  10. 深入理解 C# 编程:枚举、文件处理、异常处理和数字相加

    C# 枚举 枚举是一个特殊的"类",表示一组常量(不可更改/只读变量). 要创建枚举,请使用 enum 关键字(而不是 class 或 interface),并用逗号分隔枚举项: ...