使用WindowsService为宿主实装WCF 服务
1. 写WCF服务
创建一个接口类,与一个实现类。接口类上打上[ServiceContract]标签,需要暴露的服务方法上打上[OperationContract]
(注意:增加System.ServiceModel 类的引用
代码如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.ServiceModel;
- using System.Configuration;
- namespace Angelia.WinService.DemoWinService
- {
- [ServiceContract]
- interface IMyService
- {
- [OperationContract]
- string OutputString(string paramString);
- }
- public class MyService : IMyService
- {
- 实现接口方法的代码
- }
- }
增加app.config文件,增加WCF服务信息的结点如下:
- <system.serviceModel>
- <services>
- <service name="Angelia.WinService.DemoWinService.MyService" --服务的类名 behaviorConfiguration="basicBehavior">
- <host>
- <baseAddresses>
- <add baseAddress="http://localhost:8999/MyService"/>
- </baseAddresses>
- </host>
- <endpoint address="http://localhost:8999/MyServiceService" --指定服务的位置
- contract="Angelia.WinService.DemoWinService.IMyService" --接口类的名字,即是contract
- binding="basicHttpBinding" />
- </service>
- </services>
- <behaviors>
- <serviceBehaviors>
- <behavior name="basicBehavior">
- <serviceMetadata httpGetEnabled="true" />
- </behavior>
- </serviceBehaviors>
- </behaviors>
- </system.serviceModel>
2.创建Window Service ,把WCF服务放在window Service中
找到visual studio 自动帮助创建的OnStart方法
- protected override void OnStart(string[] args)
- {
- ServiceHost host = new ServiceHost(typeof(MyService)); --把WCF的service宿主在这里
- host.Open(); --打开服务。
- }
在设计面板上有两个控件:
一个叫serviceProcessInstaller1.选中它,到属性窗口,选择account,可以选择windows servcie的login用户身份,一般选择NetworkService.
一个叫ServiceInstaller1.选中它到属性窗口,可以设置服务名,启动类型等关于服务的一些设置。
- set WindowsServiceExeName="MyService.exe" --第一步中编译出来的exe文件。
- set WindowsServiceName="MyServiceDemo" --在安装类中设置的服务的名字。
- @ECHO.
- @ECHO -----------------------------------------------------------------
- @ECHO Installing Services %WindowsServiceName%
- @ECHO -----------------------------------------------------------------
- @ECHO.
- if Exist %WindowsServiceExeName% installutil %WindowsServiceExeName%
- @if errorlevel 1 goto :error
- httpcfg set urlacl -u http://+:8999/IngrianService/ -a D:(A;;GX;;;NS)
- @ECHO.
- @ECHO -----------------------------------------------------------------
- @ECHO Start the services for %WindowsServiceName%
- @ECHO -----------------------------------------------------------------
- @ECHO.
- net start %WindowsServiceName%
- @if errorlevel 1 goto :error
- @ECHO.
- @ECHO ----------------------------------------
- @ECHO InstallServices.bat Completed
- @ECHO ----------------------------------------
- @ECHO.
- @REM ----------------------------------------
- @REM Restore the command prompt and exit
- @REM ----------------------------------------
- @goto :exit
- @REM -------------------------------------------
- @REM Handle errors
- @REM
- @REM Use the following after any call to exit
- @REM and return an error code when errors occur
- @REM
- @REM if errorlevel 1 goto :error
- @REM -------------------------------------------
- :error
- @ECHO An error occured in InstallServices.bat - %errorLevel%
- @PAUSE
- @exit errorLevel
- @REM ----------------------------------------
- @REM The exit label
- @REM ----------------------------------------
- :exit
- popd
- set pause=
- PAUSE
- echo on
卸载Windows 服务
- set WindowsServiceExeName="MyService.exe" --第一步中编译出来的exe文件。
- set WindowsServiceName="MyServiceDemo" --在安装类中设置的服务的名字。
- @ECHO
- @ECHO -----------------------------------------------------------------
- @ECHO Stop the services for %WindowsServiceName%
- @ECHO -----------------------------------------------------------------
- @ECHO
- .net stop %WindowsServiceName%
- @ECHO
- @ECHO -----------------------------------------------------------------
- @ECHO Uninstalling Services for %WindowsServiceName%@ECHO -----------------------------------------------------------------
- @ECHO
- if Exist %WindowsServiceExeName% installutil /u %WindowsServiceExeName%
- @if errorlevel 1 goto :error
- @ECHO
- @ECHO ----------------------------------------
- @ECHO UninstallServices.bat Completed
- @ECHO ----------------------------------------
- @ECHO
- @REM ----------------------------------------
- @REM Restore the command prompt and exit
- @REM ----------------------------------------
- @goto :exit
- @REM -------------------------------------------
- @REM Handle errors
- @REM
- @REM Use the following after any call to exit
- @REM and return an error code when errors occur
- @REM
- @REM if errorlevel 1 goto :error
- @REM -------------------------------------------
- :error
- @ECHO An error occured in InstallServices.bat - %errorLevel%
- @PAUSE
- @exit errorLevel
- @REM ----------------------------------------
- @REM The exit label
- @REM ----------------------------------------
- :exit
- popd
- set pause=PAUSE
- echo on
3.客户端调用WCF服务
首先增加service reference.把服务启动后,输入服务地址,也就是第一步中配置文件中的地址,
(注意第一步中的locahost要改成机器的IP地址)
添加完引用后。app.config中有如下代码:
- <system.serviceModel>
- <bindings>
- <basicHttpBinding>
- <binding name="BasicHttpBinding_IIngrianService" closeTimeout="00:01:00"
- openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
- allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
- maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
- messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
- useDefaultWebProxy="true">
- <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
- maxBytesPerRead="4096" maxNameTableCharCount="16384" />
- <security mode="None">
- <transport clientCredentialType="None" proxyCredentialType="None"
- realm="" />
- <message clientCredentialType="UserName" algorithmSuite="Default" />
- </security>
- </binding>
- </basicHttpBinding>
- </bindings>
- <client>
- <endpoint address="http://10.1.24.143:8999/IngrianService" binding="basicHttpBinding"
- bindingConfiguration="BasicHttpBinding_IIngrianService" contract="ServiceReference1.IIngrianService"
- name="BasicHttpBinding_IIngrianService" />
- </client>
- </system.serviceModel>
调用服务方法:如下是调用代码:
- static void Main(string[] args)
- {
- ServiceReference1.MyServiceClient client = new ServiceReference1.MyServiceClient();
- string text = client.OutputString("dsfsdfsdfsdf");
- Console.WriteLine("string: " + text);
- Console.Read();
- }
使用WindowsService为宿主实装WCF 服务的更多相关文章
- Windows 服务为宿主的WCF服务,详细图解。
废话不多说,直接进入主题: 1.打开vs2010新建项目,选择Windows服务. 2.选中WindowsService右击,添加WCF服务. 3.添加成功后,为下图.将接口类ITestService ...
- WCF系列教程之WCF服务宿主与WCF服务部署
本文参考自http://www.cnblogs.com/wangweimutou/p/4377062.html,纯属读书笔记,加深记忆. 一.简介 任何一个程序的运行都需要依赖一个确定的进程中,WCF ...
- [问题]通过IIS宿主发布WCF服务,客户端添加服务引用出错的解决办法
环境配置:Web服务器:Windows Server 2008,iis7.5,.net4.0客户端:XPsp3 vs2010 sp1 问题描述:1.确定WCF服务访问地址 http://servic ...
- 使用IIS发布WCF服务
上一篇是Windows服务为宿主的WCF服务,现在用IIS为宿主发布WCF服务. 第一步:肯定是新建一个WCF服务啦[是WCF服务应用程序],然后在解决方案上再次添加一个新项目[我们选择WCF服务库, ...
- WCF服务二:创建一个简单的WCF服务程序
在本例中,我们将实现一个简单的计算服务,提供基本的加.减.乘.除运算,通过客户端和服务端运行在同一台机器上的不同进程实现. 一.新建WCF服务 1.新建一个空白解决方案,解决方案名称为"WC ...
- WCF初探-8:WCF服务承载 (上)
前言 任何一个程序的运行都需要依赖一个确定的进程中,WCF服务也不例外.如果使用WCF服务,我们就必须将服务承载于创建它并控制它的上下文和生存期的运行时环境中,承载服务环境的程序,我们称之为宿主.WC ...
- WCF服务的创建和发布到IIS
一. WCF服务的创建 有两种创建方式: 1.WCF服务库 2.WCF服务应用程序 如下图所示: 这里选择WCF服务库.注意事项: 1.WCF服务库是一个类库项目,这里选择.net 3.5版本(版本高 ...
- 【转】WCF服务的创建和发布到IIS
一. WCF服务的创建 有两种创建方式: 1.WCF服务库 2.WCF服务应用程序 如下图所示: 这里选择WCF服务库.注意事项: 1.WCF服务库是一个类库项目,这里选择.net 3.5版本(版本高 ...
- 添加宿主为控制台应用程序的WCF服务
1.创建WCF服务库:WcfServiceLibrary,根据自动创建的代码修改自己的WCF 服务协议.操作协议.数据协议.本次先实现简单的WCF最基本的通信方式:请求->应答模式. 定义服务. ...
随机推荐
- Kibana6.x.x源码分析--启动时无反应分析
今天执行启动命令后,不报错,但是也没有反应,一时不知道是什么原因造成的,后来经过分析发现,无意间删除了根目录下的一个文件夹plugins,重新创建上这个文件夹后,再次运行就OK了.
- python数据结构与算法之list
1. 数据结构的操作 作为一种包含元素的数据结构,需要提供一些“标准”操作: 创建和销毁 判断是否空,如果容量有限,还需判断是否满 向结构中加入元素或从中删除 访问结构里的元素 不同的编程语言可能影响 ...
- [原创]c# 类中 Collection 字段初始化的特殊之处
1.今天看一下StackExchange.Redis的源代码,里面有这样一段代码 public sealed class ConfigurationOptions : ICloneable { ... ...
- v-show, v-if, 以及动态组件的区别
vue提供了v-if, v-show来动态显示隐藏组件 同时也提供了<component>元素在一个挂载点上动态的切换组件, 通过 is 来决定哪个组件被渲染显示 配合<keep-a ...
- sublim text3中的一些设置
{ "dictionary": "Packages/Language - English/en_US.dic", "font_face&q ...
- 微信公众平台开发 OAuth2.0网页授权认证
一.什么是OAuth2.0 官方网站:http://oauth.NET/ http://oauth.Net/2/ 权威定义:OAuth is An open protocol to allow s ...
- EntityFramework 建立一对一关系
前言:本来要使用实体拆分实现一对一,但发现查询时无法单独查询,影响效率,故改用手动建立一对一关系 例: 实体类: public class TestDbContext : DbContext { pu ...
- MySql——安装与配置与启动和停止
在Linux上安装mysql数据库,我们可以去其官网上下载mysql数据库的rpm包,http://dev.mysql.com/downloads/mysql/5.6.html#downloads,大 ...
- ORACLE--12C--多租户体系架构概念
一,概念 1,何为多租户? 官网链接: 飞机直达>> 多租户这个概念并不是12C的新特性,而是体系架构,多租户架构使得oracle 数据库成为了一个多租户的容器数据库,也就是contain ...
- 智能手表ticwatch穿戴体验
前言 可穿戴设备近几年越来越火,最开始是谷歌眼睛.手环,再到手表.VR眼镜,相信未来几年这片领域依旧火热~ 自从谷歌发布Android Wear.苹果发布Apple Watch之后,智能手表的战役就正 ...