Winform项目中纯代码创建WCF服务
接口:
[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服务的更多相关文章
- STS热部署,springboot项目中修改代码不用重新启动服务
方法如下: 1.在pom文件中引入 devtools 依赖: <dependency> <groupId>org.springframework.boot</grou ...
- WCF入门教程(二)如何创建WCF服务
WCF入门教程(二)从零做起-创建WCF服务 通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) ...
- WCF入门(五)---创建WCF服务
使用Microsoft Visual Studio2012创建WCF服务,理解如下所有必要的编码,更好地创建WCF服务的概念,这里做一个简单的任务. 启动Visual Studio 2012. 单击新 ...
- VS2010中使用Jquery调用Wcf服务读取数据库记录
VS2010中使用Jquery调用Wcf服务读取数据库记录 开发环境:Window Servere 2008 +SQL SERVE 2008 R2+ IIS7 +VS2010+Jquery1.3.2 ...
- WCF入门教程(二)从零做起-创建WCF服务
通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) 定义了协议,具体什么操作,操作的参数和返回值 ...
- NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中
以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...
- iOS开发 纯代码创建UICollectionView
转:http://jingyan.baidu.com/article/eb9f7b6d8a81a5869364e8a6.html iOS开发 纯代码创建UICollectionView 习惯了使用xi ...
- 快速创建WCF服务和svcutil.exe工具使用
先简单的创建WCF服务: 系统会自动加上IService1接口 和 Service1 实现类 分别在IService1 和Service1 加上2段代码. [ServiceContract] publ ...
- ios - 纯代码创建collectionView
开始考虑好一点点时间,因为一般的都是用xib,或者storyboard来写的.这次用纯代码...废话较多请看 首先把storyboard干掉,工程里面的main干掉 由于干掉了storyboard则启 ...
- C# winform项目中ListView控件使用CheckBoxes属性实现单选功能
C# winform项目中ListView控件使用CheckBoxes属性实现单选功能 在做项目时需要使用ListView控件的CheckBoxes属性显示,还要在点击行时自动选中CheckBoxes ...
随机推荐
- SQL优化篇之-如何减少耗时查询的调用次数
函数调用次数与性能 在查询语句中,如果 Select 子句调用了较为耗时的函数或子查询,需要特别考虑函数调用次数对于SQL整体执行时间的影响. 一.数据准备,SQL 语句 模拟较耗时的用户函数 确保执 ...
- MySQL访问控制和用户管理
访问控制 你需要给用户提供他们所需的访问权,且仅提供他们所需的访问权.这就是所谓的访问控制,管理访问控制需要创建和管理用户账号. 多数用户只需要对表进行读和写,但少数用户甚至需要能创建和删除表: ...
- WPF中封装一个自己的MessageBox
前言 在WPF应用程序开发中,我们可以借助其强大灵活的设计能力打造出绚丽而富有创意的用户界面.然而,与这种高度定制化的界面相比,标准MessageBox却显得有些原始和古老.它的外观与现代.绚丽的应用 ...
- #LCA,二分,树上差分#洛谷 2680 运输计划
题目 一棵树,每条边上都有边权,现在选择一条边将边权变为0,使\(m\)条路径边权和其中一条的最大值最小,问这个值 分析 由于大于最终结果的一定可行,小于最终结果的一定不可行,所以二分答案,首先答案以 ...
- #树链剖分,线段树#洛谷 2486 [SDOI2011]染色
题目 分析 就是把维护颜色段和树结合起来, 注意拼接的时候要减去中间相同的部分 代码 #include <cstdio> #include <cctype> #include ...
- OpenHarmony标准系统开机时长优化
简介 万物互联时代,产品性能至关重要,而系统启动时间是系统性能的重要组成部分,因为用户必须等待系统启动完成后才能使用设备.对于经常需要进行冷启动的汽车等设备而言,较短的启动时间至关重要(没有人喜欢在等 ...
- WCHAR 字符串拼接
LPCWSTR GetIniPath() { WCHAR buffer[MAX_PATH]; BOOL result = SHGetSpecialFolderPath(0, buffer, CSIDL ...
- IaC 管理新思路:Walrus 和 Terraform 的差异化探索
Terraform 的社区版本及商业化版本,让其成为在基础设施即代码(IaC)领域中可靠的部署和管理平台.尽管目前 Terraform Cloud/Enterprise 仍然是最为广泛采用的 IaC ...
- Weblogic、Tomcat、Apache、Nginx等web容器学习笔记
1.weblogic weblogic是美国Oracle公司的一款产品,是一个基于JAVAEE架构的中间件.是用于开发.集成.部署 .管理大型分布式Web应用.网络应用.数据库应用的Java应用服务器 ...
- Redis基础(一)——字符串、hash类型的基本使用
day09--Redis Redis介绍和安装 # Redis:软件,存储数据的,速度非常快,Redis是一个key-value存储系统(没有表的概念),cs架构的软件 服务端 客户端(python作 ...