添加宿主为控制台应用程序的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程序的运行 ...
 
随机推荐
- Spark操作dataFrame进行写入mysql,自定义sql的方式
			
业务场景: 现在项目中需要通过对spark对原始数据进行计算,然后将计算结果写入到mysql中,但是在写入的时候有个限制: 1.mysql中的目标表事先已经存在,并且当中存在主键,自增长的键id 2. ...
 - JUC原子类--01
			
JUC原子操作类分为四种类型 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型: AtomicIntegerArray, Atomi ...
 - img标签和 background 属性的使用分析
			
在网页布局中引入图片,最常用的两个就是 img 标签和 background 属性了.但何时使用 img 标签,何时使用 backround 背景图像呢? <img> 标签定义 HTML ...
 - Sping AOP Capabilities and Goals
			
Spring AOP是用纯的java实现的.不需要任何个性的实现过程.Spring AOP不需要控制类加载器,并且它适用于Servlet容器或者应用服务器. Spring AOP当前只支持方法执行的连 ...
 - exe所在路径
			
procedure TForm1.btn1Click(Sender: TObject); begin //完整路径 E:\UsrSoft\Desktop\FileNameDemo\Project1.e ...
 - dynamics crm跳转到手机版本的页面
			
https://community.dynamics.com/crm/f/117/t/210393 https://community.dynamics.com/crm/f/117/t/118414 ...
 - 如何正确可视化RAW(ARW,DNG,raw等格式)图像?
			
为了正确可视化RAW图像,需要做好:白平衡.提亮以及色彩映射. import numpy as np import struct from PIL import Image import rawpy ...
 - QT:创建一个widget,包含源文件,头文件,以及ui文件
			
1. 安装QT 2. 在QT Welcome画面,点击 New Project 3. 选择Application--Qt Widgets Application 4. 按提示创建即可 文件目录如下: ...
 - MVC,MVP和MVVM三种开发模式
			
MVC: mvc模式:意思是软件可分为三部分: 视图(View):用户页面 控制器(Controller):控制器 模型(Model):模型 通讯方式: 1.View 传送指令到Controller ...
 - js简单封装样式
			
class Foo{ constructor(name) { this.name = name } greet() { console.log('hello this is',this.name) } ...