WCF服务端调用client.
wcf服务端
1,新建一个“windows窗口程序”名称为WCFServer2。
2。然后加入一个“WCF服务”名称为Service1。
详细步骤为:解决方式试图中,选中“WCFServer2”项目,右键,在弹出菜单中选择“加入->新建项”。
3,双击主窗口,在它的Load事件中编写代码启动wcf服务:BasicHttpBinding方式启动wcf服务。此文件代码例如以下:
using System.ServiceModel;
using System.ServiceModel.Description;
//…
ServiceHost m_ServiceHost;
//…
private void Form1_Load(object sender, EventArgse)
{
//NetTcpBinding方式启动wcf服务
m_ServiceHost = new ServiceHost(typeof(Service1));//Service1是wcf服务的类名称
NetTcpBindingbinding = new NetTcpBinding();
UribaseAddress = new Uri(string.Format("net.tcp://localhost:10086/WCFHostServer/Service1"));
m_ServiceHost.AddServiceEndpoint(typeof(IService1),binding, baseAddress);
m_ServiceHost.Open();
}
4,在 IService1.cs中添加一个方法Init,同一时候添加ISvrToCliCallBack接口.
namespace WCFServer2
{
// 注意: 使用“重构”菜单上的“重命名”命令,能够同一时候更改代码和配置文件里的接口名“IService1”。
[ServiceContract(CallbackContract= typeof(ISvrToCliCallBack))]
public interface IService1
{
[OperationContract]
voidDoWork();
[OperationContract]
voidInit();
}
public interface ISvrToCliCallBack
{
[OperationContract(IsOneWay= true)]
voidNotifyClientMsg(string devStateInfo);
}
}
5, 在Service1.cs中实现接口的方法Init初始化。
public static ISvrToCliCallBack userCallBack;
//...
public void Init()
{
userCallBack = OperationContext.Current.GetCallbackChannel<ISvrToCliCallBack>();
}
6,主窗体添加button。
private voidbutton1_Click(object sender, EventArgs e)
{
Service1.userCallBack.NotifyClientMsg("服务端给client通知啦");
}
7。改动app.config,WCFServer2.Service1的binding由"wsHttpBinding"改成"wsDualHttpBinding"
客服端
1,新建一个“windows窗口程序”名称为WCFClient2。
2,添加服务引用。
服务引用地址到服务端的app.config查看,就是baseAddress。
3.在FormClient中继承接口IService1Callback,实现方法NotifyClientMsg
4。主窗体启动是初始化。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using WCFClient2.ServiceReference1;
using System.ServiceModel;
namespace WCFClient2
{
public partial class Form1 : Form, IService1Callback
{
publicForm1()
{
InitializeComponent();
}
public void NotifyClientMsg(stringdevStateInfo)
{
MessageBox.Show(devStateInfo,"ddd");
}
IService1m_Innerclient;
privatevoid Form1_Load(objectsender, EventArgs e)
{
InstanceContextm_CallBackContext;
m_CallBackContext = new InstanceContext(this);
DuplexChannelFactory<IService1> m_ChannelFactory;
NetTcpBindingbinding = new NetTcpBinding();
stringstrUrl = string.Format("net.tcp://{0}:{1}/WCFHostServer/Service1",
"localhost",10085);
UribaseAddress = new Uri(strUrl);
m_ChannelFactory = new DuplexChannelFactory<IService1>(m_CallBackContext, binding, new EndpointAddress(baseAddress));
m_Innerclient =m_ChannelFactory.CreateChannel();
Service1Clienthost = new ServiceReference1.Service1Client(m_CallBackContext);
host.Init();//调用GetSvrTime获取到wcfserver上的时间
}
}
}
WCF服务端调用client.相关推荐
- WCF 服务端+客户端动态调用
最近在写WCF服务相关代码,把项目中用到的通讯框架做了下整理,以备以后自己记忆. WCF服务端: 包含契约定义:WCF.Contract.契约实现:WCF.Service 以及宿主主程序:WcfSer ...
- WCF服务端运行时架构体系详解[下篇]
作为WCF中一个核心概念,终结点在不同的语境中实际上指代不同的对象.站在服务描述的角度,我们所说的终结点实际上是指ServiceEndpoint对象.如果站在WCF服务端运行时框架来说,终结点实际上指 ...
- grpc(3):使用 golang 开发 grpc 服务端和client
1,关于grpc-go golang 能够能够做grpc的服务端和client. 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://g ...
- C#实现微信企业号API服务端调用封装
C#实现微信企业号API服务端调用封装 背景 代码封装 时间戳方法 基础方法:验证服务器接口.服务端解密.服务端加密.获取AccessToken.生成企业获取Code URL.获取授权用户信息.获取调 ...
- 金蝶服务端调用OSF服务
在金蝶使用中会用前端和后端调用OSF服务 1. 前端调用方法: shr.callService({serviceName : "transformationService",pa ...
- Delphi作为客户端调用.Net写的WCF服务端?
这方面的文章太少了,查了半天也只看到一两篇,关键点 1.wcf的Binding要配成 basicHttpBinding,否则Delphi无法通过WebService的方式调用服务 2.Delphi I ...
- WCF服务端返回:(413) Request Entity Too Large
出现这个原因我们应该都能猜测到,文件传出过大,超出了WCF默认范围,那么我们需要进行修改. 服务端和客户端都需要修改. 第一.客户端: <system.serviceModel><b ...
- WCF服务端的.NET Core支持项目Core WCF 正式启动
长期以来在wcf客户端库https://github.com/dotnet/wcf里反应最强烈的就是.NET Core的服务端支持https://github.com/dotnet/wcf/issue ...
- 在Unity3D中连接WCF服务端
服务端不多讲解,有一处需要改的地方.具体服务端请看WCF入门学习2-控制台做为宿主 建议实际项目不要拿去用,毕竟是mono不是原生.net.或许是个坑 由于Unity的mono版本问题不能直接用net ...
最新文章
- 长篇自动驾驶技术综述论文(下)
- linux 使用 C 语言获得系统 MAC 地址
- celery mysql flask_如何在Flask中创建Celery实例?
- 耗时6个月整理的最全Java资源,限时删
- JavaWeb(十一)——登录注册小案例
- mysql数据库设计与应用答案智慧树_智慧树_MySQL数据库设计与应用_完整免费答案...
- 每日一题(36)—— 什么是预编译 , 何时需要预编译?
- kafka经典面试题
- nginx开启支持websocket连接
- Net::SSH::Perl 包 与 Net::OpenSSH 包的 性能对比代码
- error:“Unexpected namespace prefix xmlns found for tag LinearLayout”
- Mysql索引的本质深入浅出(二)
- 当纺织遇上阿里云,数学博士钻进车间要让企业更高效
- hiveSql获取日期时间
- VxLAN技术基本原理
- Wireguard 全互联模式(full mesh)权威指南
- texmacs 源码安装
- 解决win10和ubuntu18,win10时间不同步问题
- 红米k30至尊版是5g吗 红米k30至尊版怎么样
- 大卫·希尔伯特:数学界的无冕之王
热门文章
- python 在排序数组中查找元素的第一个和最后一个位置
- Java版的防抖(debounce)和节流(throttle)
- Java对异常处理或抛出之后,后面代码会不会再执行?
- 如何线程安全的使用HashMap
- 射影几何3:拓广平面
- 【面试练习题】存在序列:1,1/2,2/3,3/5,5/8,8/13...,求前10项的和
- python – 处理psycopg2中的错误 psycopg2.errors.InFailedSqlTransaction: current transaction is aborted, comm
- python3 bytes和str转换,解决图片base64调用api的问题
- linux vi/vim使用
- 用c语言编写图书成绩管理系统,学生成绩管理系统(c语言编写).doc