添加宿主为控制台应用程序的WCF服务
1.创建WCF服务库:WcfServiceLibrary,根据自动创建的代码修改自己的WCF 服务协议、操作协议、数据协议。本次先实现简单的WCF最基本的通信方式:请求-》应答模式。
定义服务、操作协议接口:
[ServiceContract]
public interface IUser
{
[OperationContract(IsOneWay = true)]
void SetData(UserInfo _UserInfo);
[OperationContract]
List<UserInfo> GetData();
[OperationContract]
int GetCount();
}
实现协议接口:
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
public class User : IUser
{
IUserCallBack callback = null;
/// <summary>
/// 构造函数
/// </summary>
public User()
{
Timer time = new Timer(10000);
time.Enabled = true;
time.Elapsed += time_Elapsed;
callback = OperationContext.Current.GetCallbackChannel<IUserCallBack>();
}
void time_Elapsed(object sender, ElapsedEventArgs e)
{
callback.DataChanged();
}
public void SetData(UserInfo _UserInfo)
{
if (!UserCollection.Users.Exists(p => p.IdCard == _UserInfo.IdCard))
UserCollection.Users.Add(_UserInfo);
}
public List<UserInfo> GetData()
{
return UserCollection.Users;
}
public UserInfo GetDataById(string IdCard)
{
return UserCollection.Users.First((p) => { return p.IdCard.ToLower() == IdCard.ToLower(); });
}
public int GetCount()
{
return UserCollection.Users.Count();
}
}
定义数据协议:
public enum Sex
{
Male = 1,//男性
FeMale = 0//女性
}
// 使用下面示例中说明的数据约定将复合类型添加到服务操作。
[DataContract]
public class UserInfo
{
[DataMember]
public string IdCard { set; get; }
[DataMember]
public string FirstName { set; get; }
[DataMember]
public string LastName { set; get; }
[DataMember]
public Sex UserSex { set; get; }
[DataMember]
public Int16 Age { set; get; }
}
2.创建控制台应用程序,将上面的WCF服务库项目添加进来。配置和打开宿主、终结点、行为描述。 host、EndPoint、behaviors可以在Config中设置,也可以在程序中实现。
A.配置Config,控制台主程序中只需要启动宿主就行了,配置节为:
<system.serviceModel>
<services>
<service name="WcfServiceLibrary.User">
<endpoint address="" binding="basicHttpBinding" contract="WcfServiceLibrary.IUser">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8021/User/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!--为避免泄漏元数据信息,
请在部署前将以下值设置为 false-->
<serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>
<!--要接收故障异常详细信息以进行调试,
请将以下值设置为 true。在部署前设置为 false
以避免泄漏异常信息-->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
//启动SeriviceHost
static void Main(string[] args)
{
ServiceHost host = new ServiceHost(typeof(WcfServiceLibrary.User));
host.Open();
Console.WriteLine("WCF中的HTTP监听已启动....");
Console.ReadLine();
host.Close();
}
B.配置文件中的配置,也可以直接在程序中实现:
static void Main(string[] args)
{
//创建宿主的基地址
Uri baseAddress = new Uri("http://localhost:8021/User");
//创建宿主
using (ServiceHost host = new ServiceHost(typeof(WcfServiceLibrary.User), baseAddress))
{
//向宿主中添加终结点
host.AddServiceEndpoint(typeof(WcfServiceLibrary.IUser), new WSHttpBinding(), "");
//将HttpGetEnabled属性设置为true
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
//将行为添加到Behaviors中
host.Description.Behaviors.Add(smb);
//打开宿主
host.Open();
Console.WriteLine("WCF中的HTTP监听已启动....");
Console.ReadLine();
host.Close();
}
}
3.启动服务,创建Web应用程序。
添加对服务的引用(在引用上右键-->输入我们定义的服务宿主的基地址(此处为:http://localhost:8021/User)-->前往-->确定)。
若报错的话,首先检查WCF服务地址是否正确;再检查防火墙设置,服务端口是否已经设置为安全端口。一般都是端口没有开放的原因造成错误。
添加宿主为控制台应用程序的WCF服务的更多相关文章
- 使用Winform程序作为WCF服务的宿主
如果我们自己新建一个WCF服务库,生成了dll文件.那我们需要创建一个宿主程序,在本例中我们新建一个Winform程序作为WCF的宿主程序. 在网上很多教程里对创建过程写的很模糊,错误也很多.本文是作 ...
- WCF学习之旅—WCF服务部署到应用程序(十)
上接 WCF学习之旅—WCF寄宿前的准备(八) WCF学习之旅—WCF服务部署到IIS7.5(九) 五.控制台应用程序宿主 (1) 在解决方案下新建控制台输出项目 ConsoleHosting.如下 ...
- WCF系列教程之WCF服务宿主与WCF服务部署
本文参考自http://www.cnblogs.com/wangweimutou/p/4377062.html,纯属读书笔记,加深记忆. 一.简介 任何一个程序的运行都需要依赖一个确定的进程中,WCF ...
- WCF学习之旅—WCF服务的Windows 服务程序寄宿(十一)
上接 WCF学习之旅—WCF服务部署到IIS7.5(九) WCF学习之旅—WCF服务部署到应用程序(十) 七 WCF服务的Windows 服务程序寄宿 这种方式的服务寄宿,和IIS一样有一个一样 ...
- 使用IIS发布WCF服务
上一篇是Windows服务为宿主的WCF服务,现在用IIS为宿主发布WCF服务. 第一步:肯定是新建一个WCF服务啦[是WCF服务应用程序],然后在解决方案上再次添加一个新项目[我们选择WCF服务库, ...
- IIS8托管WCF服务
WCF服务程序本身不能运行,需要通过其他的宿主程序进行托管才能调用WCF服务功能,常见的宿主程序有IIS,WAS,Windows服务,当然在学习WCF技术的时候一般使用控制台应用程序或WinForm程 ...
- WCF学习笔记(2)——使用IIS承载WCF服务
通过前面的笔记我们知道WCF服务是不能独立存在,必须“寄宿”于其他的应用程序中,承载WCF服务的应用程序我们称之为“宿主”.WCF的多种可选宿主,其中比较常见的就是承载于IIS服务中,在这里我们来学习 ...
- WCF开发实战系列四:使用Windows服务发布WCF服务
WCF开发实战系列四:使用Windows服务发布WCF服务 (原创:灰灰虫的家http://hi.baidu.com/grayworm) 上一篇文章中我们通过编写的控制台程序或WinForm程序来为本 ...
- WCF服务寄宿IIS与Windows服务 - C#/.NET
WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行 ...
随机推荐
- js如何实现类的继承
方法一:借助构造函数实现继承 这种方法的缺点:原型链上的东西并没有被继承. 方法二:借助原型链实现继承 这种方法的缺点:改变了一个实例对象,另一个实例对象也跟着改变,因为s1.__proto__ == ...
- java 形式参数和实际参数的区别
1.形参不能离开方法.形参只有在方法内才会发生作用,也只有在方法中使用,不会在方法外可见.而实参可以再程序的任何地方都使用.
- 一个简单的对任意list分页的工具-----PageUtil
一.工具类代码 1 import java.util.List; 2 import java.util.stream.Collectors; 3 4 public class PageUtil< ...
- Loadrunner与idea编写加密的java Vusers脚本总结
Loadrunner与idea编写加密的java Vusers脚本总结 准备工作: jdk版本的选择: Loadrunner11 使用版本jdk1.6 32位(如果使用1.7的Load ...
- angular6 aot 预先编译
angular.json文件:(红色加粗部分) { "$schema": "./node_modules/@angular/cli/lib/config/schema.j ...
- 20175212童皓桢 《Java程序设计》第一周学习
学号 20175212-2 <Java程序设计>第1周学习总结 教材学习内容总结 1.安装了virtualbox 并配置了推荐的Ubuntu虚拟机 2.在Linux下通过shell,安装了 ...
- PDF 补丁丁 0.6.0.3427 版发布(修复提取图片问题)
新的版本进一步改善了导出图片的问题.
- IntelliJ IDEA 安装和破解教程
1.首先下载IntelliJ IDEA,下载链接:http://www.jetbrains.com/idea/download/#section=windows:记得一定要选择UItimate版! 2 ...
- RPA与AI_新技术能给企业业务流程带来怎样的价值?
RPA助力于流程自动化蜕变 RPA是Robotic Process Automation的缩写,意为: 将机器人作为虚拟劳动力,依照预先设定的程序与现有用户系统进行交互并完成设定好的任务流程.RPA可 ...
- SQL-55 分页查询employees表,每5行一页,返回第2页的数据
题目描述 分页查询employees表,每5行一页,返回第2页的数据CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` d ...