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); } } }
本文来自博客园,作者:MaQaQ,转载请注明原文链接:https://www.cnblogs.com/magicMaQaQ/p/18142796
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?