最近客户要求把服务器端程序里的二个功能用service的方式提供出来,方便调用。首先想着单独建一个wcf 服务的项目,但是因为要用到server端程序winform里的变量,因此只能在winform里添加一个wcf service的item。下面介绍详细的操作步骤:

 

1. winform里添加wcf service的item

添加之后,app.config里会自动加上wcf的配置项:

<system.serviceModel>

    <behaviors>

      <serviceBehaviors>

        <behavior name="">

          <serviceMetadata httpGetEnabled="true" />

          <serviceDebug includeExceptionDetailInFaults="true" />

          

        </behavior>

      </serviceBehaviors>

    </behaviors>

    <services>

      <service name="OrayTalk.Server.Broadcast.BroadcastService">

        <endpoint address="" binding="basicHttpBinding" contract="OrayTalk.Server.Broadcast.IBroadcastService">

          <identity>

            <dns value="localhost" />

          </identity>

        </endpoint>

        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

        <host>

          <baseAddresses>

            <add baseAddress="http://localhost:8111/BroadcastService" />

          </baseAddresses>

        </host>

      </service>

    </services>

  </system.serviceModel>

 

其中下面这行,我把它改得简单了一点,默认的地址太长:

<add baseAddress="http://localhost:8111/BroadcastService" />

 

2.  定义好service,这里我用构造函数把winform里的变量传进来:

public class BroadcastService : IBroadcastService

{

    public static IRapidServerEngine m_RapidServerEngine;

    public static IOrayCache m_OrayCache;

 

    public BroadcastService(IRapidServerEngine rapidServerEngine, IOrayCache orayCache)

    {

        m_RapidServerEngine = rapidServerEngine;

        m_OrayCache = orayCache;

    }

 

    ...

}

 

3. 在form的load事件里host wcf服务, closed事件里关闭:

ServiceHost m_Host;

private void MainServerForm_Load(object sender, EventArgs e)

{

    try

    {

        BroadcastService broadcastSvc = new BroadcastService(this.rapidServerEngine, orayCache);

        m_Host = new ServiceHost(broadcastSvc);

        m_Host.Open();

    }

    catch (Exception ex)

    {

        MessageBox.Show(ex.Message);

    }

}

 

private void MainServerForm_FormClosed(object sender, FormClosedEventArgs e)

{

    m_Host.Close();

}

 

这里要注意的是下面二行,把变量传递进去:

BroadcastService broadcastSvc = new BroadcastService(this.rapidServerEngine, orayCache);

m_Host = new ServiceHost(broadcastSvc);

如果不用传变量到wcf服务里,可以简化成

m_Host = new ServiceHost(typeof(BroadcastService))

4. wcf服务类上加上属性

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

public class BroadcastService : IBroadcastService

5. 启动winform程序后,就可以访问在第一步里定义的wcf地址了

<add baseAddress="http://localhost:8111/BroadcastService" />

 

这时访问http://localhost:8111/BroadcastService即可。

 

 

疯吻IT

winform里宿主WCF,并传递winform变量给WCF的更多相关文章

  1. winform里操作打开在panel里的form窗体,子窗体操作同级子窗体或者父窗体的方法

    最近开始了一个winform项目,原先一直都是web项目.遇到个问题,就是在框架内,左侧和中间的main都是用panel来实现的form,就是把form窗体打开到panel里,实现左侧是导航,中间是操 ...

  2. winform里dataGridView分页代码,access数据库

    winform里dataGridView分页,默认dataGridView是不分页的和webform里不一样,webform中GridView自带自带了分页. 现在c/s的程序很多时候也需要webfo ...

  3. RDLC报表 在WinForm里运行出现 未能加载文件或程序集 Microsoft.ReportViewer.WinForms, Version=11.0.0.0 System.IO.FileNotFoundException

    原文:RDLC报表 在WinForm里运行出现 未能加载文件或程序集microsoft.reportviewer.winforms 推荐以下方案二 做一下记录顺便帮助一下遇到问题的朋友. 做RDLC报 ...

  4. 在WinForm里嵌入WPF模拟公交运行状态

    公司有个公交项目,模拟公交运行的时候使用的纯WinForm技术,5秒钟刷新一次,不仅看起来感觉很丑,而且性能上很有问题,听说一段时间后就会因为内存问题崩溃(估计是没释放非托管资源吧,不断重绘,非托管资 ...

  5. 如何查看Docker容器环境变量,如何向容器传递环境变量

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 了解Docker容器的运行环境非常重要,我们把应用放在容器里执行,环境变量会直接影响程序的执行效果.所以我们要知道容器内部的 ...

  6. 【持续集成】[Jenkins]Job中如何传递自定义变量

    [Jenkins]Job中如何传递自定义变量 来自dweiwei   2015-06-27 18:37:19|  分类: 自动化测试 |举报 |字号大中小 订阅 用微信  “扫一扫” 将文章分享到朋友 ...

  7. 如何在存储过程的IN操作中传递字符串变量

    原始SQL如下: SELECT MONTH(OrderTime) AS datetype, SUM(DeliveryCount) AS decount, Region FROM (SELECT dbo ...

  8. ssh时传递环境变量

    设置要传递的变量: -o SendEnv=Varname 但是不是每个都能传,受服务器上sshd_config里的下面两个选项的控制: AcceptEnv and PermitUserEnvironm ...

  9. 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数

    [问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ...

随机推荐

  1. Swift使用AlamoFire超时设置和事件处理

    一直在写swift项目,正好碰到服务器部署,请求超时或者请求失败的问题,页面就卡着不动了.顺手解决一下吧 差了些资料,说要设置超时时间 方法一: static let sharedSessionMan ...

  2. 20155306 白皎 《网络攻防》 EXP7 网络欺诈技术防范

    20155306 白皎 <网络攻防> EXP7 网络欺诈技术防范 问题回答 (1)通常在什么场景下容易受到DNS spoof攻击 局域网内的攻击以及连接公众场所的共享wifi (2)在日常 ...

  3. 20155321 《网络攻防》 Exp4 恶意代码分析

    20155321 <网络攻防> Exp4 恶意代码分析 计划任务监控 在C盘根目录下建立一个netstatlog.bat文件(先把后缀设为txt,保存好内容后记得把后缀改为bat),内容如 ...

  4. POJ1080

    一道字符串DP,然而不需要状压之类的玄学操作 题目大意:给你两个串,由'A','C','G','T'组成,现在你可以在这两个串中的某些位置插入'-',最终要使得它们的长度相等 给出两个字符匹配时的匹配 ...

  5. controlfile 备份到trace文件例子

    主要是为了学习oracle的克隆.参考: http://www.dba-oracle.com/oracle_tips_db_copy.htm 执行: SQL>alter database bac ...

  6. debian系统下改语言设置

    debian系统下改语言设置 安装debian 的时候选择了中文zh_CN_UTF-8,然后进系统后想换成en_US_UTF-8 可以使用一下命令选择:找到需要的语言 确定即可 dpkg-reconf ...

  7. 汇编 for循环

    知识点: for循环生成代码1 for循环生成代码2 inc指令 一.一般情况下的for循环汇编代码分析 ;i<=;i++) { printf("%d,",i); } ...

  8. mfc 线程的诞生和死亡

    知识点:  线程概念  线程的诞生  线程的死亡 一. 线程: 线程,是程序执行流的最小单元. 另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点 ...

  9. 【第七课】Nginx反向代理和负载均衡

    目录 一.Nginx负载均衡集群 介绍 二.实现一个简单的负载均衡 三.Nginx负载均衡组件介绍 四.Nginx负载均衡实际应用 一.Nginx负载均衡集群 介绍 负载均衡(Load Balance ...

  10. [咸恩静][Love effect]

    歌词来源:http://music.163.com/#/song?id=31877654 作曲 : Monster Factory/양승욱 [作曲 : Monster Factory/yang-seu ...