一、自我寄宿(self-hosting)

  1、wcf采用基于终结点(Endpoint)的通信手段;终结点由:地址(Address)+绑定(Binding)+契约(Contract)组成;  Enpoint=ABC.

  2、终结点的添加和服务行为的定义

    (1)通过代码的方式

      

static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
{
host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:3721/calculatorservice");
if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
{
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("http://127.0.0.1:3721/calculatorservice/metadata");
host.Description.Behaviors.Add(behavior);
}
host.Opened += delegate
{
Console.WriteLine("服务已经启动,按任意键终止!");
};
host.Open();
Console.Read();
}
}

    (2)wcf服务配置编辑器

        工具-->wcf服务配置编辑器,配置完成会自动生成配置文件内容;

      

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_CalculatorService" />
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://127.0.0.1:3721/calculatorservice" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_CalculatorService" contract="CalculatorService.CalculatorService"
name="WSHttpBinding_CalculatorService">
<identity>
<userPrincipalName value="" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>

      调用:

 static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
{
host.Opened += delegate
{
Console.WriteLine("服务已经启动,按任意键终止!");
};
host.Open();
Console.Read();
}
}

      也可以使用ChannelFactory<ICalculator>创建代理:

 static void Main(string[] args)
{
using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>(new WSHttpBinding(),
"http://127.0.0.1:3721/calculatorservice"))
{
ICalculator proxy = channelFactory.CreateChannel();
Console.WriteLine(proxy.Multiply(, ));
Console.ReadKey();
}
}

二、iis寄宿

  1、新建空的web应用程序

  2、新建Service.svc文件:新建项目-->Visual C#-->直接在名称框输入:Service.svc保存即可

  3、打开Service.svc,内容修改为:<%@ServiceHost Service="Service.CalculatorService" %>作用就是映射到服务

  4、定义的接口拷贝到当前应用程序下,修改web.config;由于服务端采用不加密的方式传输,所以客户端也相应的配置如此

<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="bindingConfiguration1">
<security mode="None">
<transport clientCredentialType="None"/>
<message clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehaviors" >
<!-- 将下列元素添加到服务行为配置中。 -->
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors> <services>
<!-- 注意: 服务名称必须与服务实现的配置名称相匹配。 -->
<service name="Service.CalculatorService" behaviorConfiguration="metadataBehaviors" >
<!-- 添加下列终结点。 -->
<!-- 注意: 服务必须有一个 http 基址以便添加此终结点。 -->
<endpoint contract="ServiceI.Interface.ICalculator" binding="wsHttpBinding" bindingConfiguration="bindingConfiguration1"/>
</service>
</services> </system.serviceModel>

  5、发布之后,生成相关dll和Service.svc文件,在iis中像发布网站一样寄宿服务;在浏览器输入http:*****/Service.sv就可以访问了

  static void Main(string[] args)
{
WSHttpBinding WShb = new WSHttpBinding();//使用协议与服务端相同
WShb.Security.Mode = SecurityMode.None; //安全级别
EndpointAddress epo = new EndpointAddress("http://*********/Service.svc");//指定WCF服务地址 using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>(WShb, epo))
{ ICalculator proxy = channelFactory.CreateChannel(); Console.WriteLine(proxy.Multiply(, ));
Console.ReadKey();
} }

以上是使用代码方式创建服务通道,也可以直接引用服务调用;

代码下载:点击下载

wcf系列(一)--- 寄宿方式的更多相关文章

  1. WCF :IIS寄宿方式的Web地址、BaseAddress和EndPoint Address的关系

    对于在IIS中通过W3SVC或WAS寄宿的WCF Service,其在浏览器中显示的地址(Web地址),与其配置文件中的BaseAddress和EndPoint Address有什么关系呢?让我们来分 ...

  2. (转)WCF开发框架形成之旅---WCF的几种寄宿方式

    WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便.高效提供服务调用.本文分别对这几种方式进行详 ...

  3. WCF寄宿方式

    WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者 ...

  4. WCF开发框架形成之旅---WCF的几种寄宿方式

    WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者 ...

  5. 微软 WCF的几种寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服务

    WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便.高效提供服务调用.本文分别对这几种方式进行详 ...

  6. [转]WCF的几种寄宿方式

    转自:WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为 ...

  7. 创建WCF服务自我寄宿

    WCF服务的寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以寄宿在各种进程之中,常见的寄宿有: IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为 ...

  8. WCF服务自我寄宿

    WCF服务的寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以寄宿在各种进程之中,常见的寄宿有: IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为 ...

  9. WCF学习之三, 寄宿方式 代码,配置文件

    可以通过代码或者配置文件寄宿WCF服务,在使用过程中的一些心得,记录一下,方便后续查阅. 预备知识,几个地址的作用 1. behavior.HttpGetUrl  定义元数据的地址,如果不定义基地址, ...

  10. 通过代码的方式完成WCF服务的寄宿工作

    使用纯代码的方式进行服务寄宿 服务寄宿的目的是为了开启一个进程,为WCF服务提供一个运行的环境.通过为服务添加一个或者多个终结点,使之暴露给潜在的服务消费,服务消费者通过匹配的终结点对该服务进行调用, ...

随机推荐

  1. LOJ#2302. 「NOI2017」整数

    $n \leq 1000000$个操作:一,给$x$加上$a*2^b$:二,问$x$的某个二进制位$k$.$b,k \leq 30n$,$|a| \leq 1e9$. 30暴露了一切..可以把30个二 ...

  2. 从网上搜集的X86 显示 int 10H

    INT 10H 是由 BIOS 对屏幕及显示器所提供的服务程序,而后倚天公司针对倚天中文提供了许多服务程序,这些服务程序也加挂在 INT 10H 内.使用 INT 10H 中断服务程序时,先指定 AH ...

  3. Android 禁止状态栏下拉status bar

    如果你有这样的需求:用户进入你的app以后,所有的操作都是你的app中设定的,用户不可以拥有系统设置等行为的能力.然而,Android系统,可以通过从顶部往下拉,从而得到一个通知和快速系统设置的页面: ...

  4. 打印倒序NxN乘法表

    一.实验要求: 给定任意一个字符N(N>0),然后打印NxN的倒序乘法表. 二.解决问题: #/!bin/bash# #define functionNxN_fun(){ local i=$1 ...

  5. vue + django 的权限控制

    用vue做前端页面, Django 提供api, 写了一个后台系统,结合方式是vue打包后的dist目录直接作为Django的静态目录, 这样的好处是不用配置Nginx具体的做法不在这里写了,记一下遇 ...

  6. python3 - pop 接收邮件/ smtp 发送邮件

    以下通过python3 实现接收和发送邮件,网上相关说明文档很多.请自己查阅,这里只写入代码, # 实例:通过poplib 模块接收指定账号的邮件并进行解码处理,结果可视化. #!/opt/pytho ...

  7. MyBatis的一级缓存和二级缓存

    一级缓存 是SqlSession级别的缓存,当使用了clearCache方法和,或者close方法的话,这个缓存失效,如果还有同样的查询,则还会发送一次查询 SqlSession session = ...

  8. Android中Drawable知识总结

    本文是学习<Android开发艺术探索>中Drawable章节之后的一个总结. 一.常见的Drawable种类介绍 Drawable类 xml标签 描述 BitmapDrawable 表示 ...

  9. SQL-基础学习3--通配符:LIKE,%,(_); 拼接:+,||,concat;

    第六课 用通配符进行过滤 6.1  LIKE操作符 通配符本身实际上是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符.为在搜索子句中使用通配符,必须使用LIKE操作符.LIKE指示DB ...

  10. mysql 授权新的root用户

    grant all privileges to *.* on system@'localhost' identified by 'woshishui' with grant option;