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.的更多相关文章

  1. WCF服务端开发和客户端引用小结

    1.服务端开发 1.1 WCF服务创建方式 创建一个WCF服务,总是会创建一个服务接口和一个服务接口实现.通常根据服务宿主的不同,有两种创建方式. (1)创建WCF应用程序 通过创建WCF服务应用程序 ...

  2. wcf第三方客户端与wcf服务之间调用入门

    Wcf服务与我们的客户端如何建立联系的呢.本文简单记录一下 1.创建我们的wcf服务程序. 第一个wcf服务库是创建我们的wcf库,运行时会单独来托管我们的程序,而非托管在iis下. 第二个wcf服务 ...

  3. WCF 服务端异常封装

    通常WCF服务端异常的详细信息只有在调试环境下才暴露出来,但我目前有需求需要将一部分异常的详细信息传递到客户端,又需要保证一定的安全性. 最简单的办法当然是在服务端将异常捕获后,序列化传给客户端,但这 ...

  4. grpc(3):使用 golang 开发 grpc 服务端和client

    1,关于grpc-go golang 能够能够做grpc的服务端和client. 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://g ...

  5. [并发并行]_[线程模型]_[Pthread线程使用模型之三 客户端/服务端模型(Client/Server]

    Pthread线程使用模型之三 客户端/服务端模型(Client/Server) 场景 1.在客户端/服务端模型时,客户端向服务端请求一些数据集的操作. 服务端执行执行操作独立的(多进程或跨网络)– ...

  6. 服务端调用接口API利器之HttpClient

    前言 之前有介绍过HttpClient作为爬虫的简单使用,那么今天在简单的介绍一下它的另一个用途:在服务端调用接口API进行交互.之所以整理这个呢,是因为前几天在测试云之家待办消息接口的时候,有使用云 ...

  7. C# WCF服务端搭建和客户端调用

    1) 打开Visual Studio 2012,在菜单上点击文件->新建->项目->WCF服务应用程序.在弹出界面的"名称"对应的文本框中输入"WcfS ...

  8. WCF服务端返回:(413) Request Entity Too Large

    出现这个原因我们应该都能猜测到,文件传出过大,超出了WCF默认范围,那么我们需要进行修改. 服务端和客户端都需要修改. 第一.客户端: <system.serviceModel> < ...

  9. WCF服务端与客户端时间匹配问题

    当服务端部署的WCF服务服务在被客户机调用时,如果显示: 错误,展开后,详细错误为:An error occurred when verifying security for the message ...

随机推荐

  1. 奇妙的CSS之伪类与伪元素

    我们都知道,在CSS中有很多选择器,例如id(#), class(.),属性[attr],这些虽然可以满足一些需要,但有时候还力有未逮.伪类和伪元素就提供了一个有益的补充,可以使我们更高效编码.伪类和 ...

  2. java IO流之——File类知识总结和面试

    File类描述的是一个文件或文件夹.(文件夹也可以称为目录).该类的出现是对文件系统的中的文件以及文件夹进行对象的封装.可以通过对象的思想来操作文件以及文件夹.可以用面向对象的处理问题,通过该对象的方 ...

  3. caffe细节

    1.BN层参数设置 在训练时所有BN层要设置use_global_stats: false(也可以不写,caffe默认是false) 在测试时所有BN层要设置use_global_stats: tru ...

  4. NFS服务简介

    NFS服务简介 NFS是Network File System的缩写,即网络文件系统.NFS是由Sun开发并发展起来的一项用于在不同机器,不同操作系统之间通过网络互相分享各自的文件.NFS serve ...

  5. 20165203《Java程序设计》第五周学习总结

    教材学习内容总结 第七章 内部类 注意内部类和外嵌类的关系: 外嵌类的成员变量和方法在内部类有效 内部类的类体不可以声明static变量和方法.外嵌类的类体可以用内部类声明对象. 内部类仅供它的外嵌类 ...

  6. TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

    TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的键必 ...

  7. SQL Server中的快捷键

    新建查询:Ctrl + N 反撤销:Ctrl + Y 撤销:Ctrl + Z 查找:Ctrl + F 启动调试:Alt + F5 注释:Ctrl + K + C 取消注释:Ctrl + K + U 执 ...

  8. 【LOJ】#2447. 「NOI2011」兔兔与蛋蛋的游戏

    题解 对于75分来说,操作肯定不会成环,可以暴搜 看成空格在移动,空格移动到原来的位置肯定经历了偶数个格子,但是操作的人是两个不同的人,所以肯定不会成环 对于满分做法,要找到一种更好的方式判先手是否会 ...

  9. 解决ssh登陆过慢问题

    我们经常会遇到的一个情况是telnet到server速度很快,但是ssh连接的时候却很慢,大概要等半分钟甚至更久.ping的速度也非常好,让人误以为是ssh连接不上. 下面说下如何解决这样的问题,最为 ...

  10. 手动安装pydev

    在网上下载pydev.zip,解压后有两个文件夹,features和plugins.把这两个文件夹复制到eclipse目录下的dropins文件夹下.