标签归档WCF

澳门新葡亰官网WCF 创建WCF

一、概述

  Windows Communication
Foundation(WCF)是由于微软腾飞之同组数通信的应用程序开发接口,可以翻为Windows通讯接口,它是.NET框架的一样局部。由
.NET Framework 3.0 开始引入。

  WCF的最终目标是由此进程要不同的系统、通过本地网络或是通过Internet收发客户及劳务中间的音。

  WCF合并了Web服务、.net Remoting、消息队列和Enterprise
Services的效用并集成以Visual Studio中。

  WCF专门用来面向服务开发。

第二、基于Asp.net 的应用程序开发同面向服务支出

澳门新葡亰官网 1

  以根据Asp.net
的应用程序开发被,我们是因为客户机的浏览器访问应用程序服务器,然后经过应用程序服务器受到的数据库连接去老是数据库服务器,读取或是操作数据,有时候可能会见多一个文件服务器。大家好洞察到,基本上所有的以还居了千篇一律光服务器上,但对此一个,由于业务达到的待(如:与外表系统相互),一尊服务器很为难支撑具有的应用。我们更看下面的觊觎:

澳门新葡亰官网 2

  客户机使用浏览器访问服务器A,服务器A为了工作要和任何各种应用部署于劳动器B、C、D….还通过WCF技术并行通信,相互访问…然而面向服务之功利不仅仅以斯,他还提供了不同语言不同操作系统的而相互性..由于本文不是介绍SOA的稿子,感兴趣之同室可以参见:SOA

三、第一个WCF程序

  1.
新成立空白解决方案,并在解决方案中新建项目,项目项目也:WCF服务应用程序。建立好后要下图所示:

澳门新葡亰官网 3

  2.刨除系统生成的个别只公文IService1.cs以及Service1.svc。

  3.添加打定义的WCF【服务文件】User.svc,此时vs2010碰头自动生成WCF接口文件IUser.cs,我们于IUser中定义WCF方法ShowName,在User.svc.cs对该接口的法门开展落实。

代码如下:

using System.ServiceModel;

namespace WCFService
{
    [ServiceContract]
    public interface IUser
    {
        [OperationContract]
        string ShowName(string name);
    }
}


namespace WCFService
{
    public class User : IUser
    {
        public string ShowName(string name)
        {
            string wcfName = string.Format("WCF服务,显示姓名:{0}", name);
            return wcfName;
        }
    }
}

大家可见到,在WCF中的接口和普通接口的区别就在乎个别单达到下文,其他的与咱们如常上学之接口一样。定义是上下文要填补加System.ServiceModel的援。

[ServiceContract],来证明接口是一个WCF的接口,如果非加的话,将无可知给标调用。

[OperationContract],来说明该方法是一个WCF接口的法门,不加的语句和齐。 

这会儿咱们的率先独WCF服务程序就起好了,将User.svc“设为自始页”,然后F5运作一下试试,如下图所显示,VS2010自行调用了WCF的客户端测试工具以便我们测试程序:

澳门新葡亰官网 4

  我们双击上图备受的 ShowName() 方法,出现如下图:

澳门新葡亰官网 5

  于呼吁窗口被的值备受输入参数“你的人名”,然后点击“调用”,在响应窗口中见面并发返回值“WCF服务,显示姓名:你的真名”,说明测试成功,点击下面的XML也得以视XML的数量传。我们现在建立好了劳动之应用程序和事情逻辑,即非常简单的打印姓名的法门,测试为不负众望了。那么我们怎么用呢?

四、场景

  我们规划之现象是当生育被不时以的状况,把WCF程序寄宿在IIS之上。假设场景如下:A服务器和B服务器。我们将咱正好确立的WCF程序“部署”在B服务器上(本课程的A,B服务器都放是本身好之一模一样宝机器),我们的靶子是以A服务器的应用程序来访问B服务器的WCF程序,实现服务器端的应用程序通讯。

五、将WCF程序寄宿在B服务器的IIS之上

  首先我们用WCF应用程序发布一下,然后部署在B服务器的IIS之上,如下图所示:

澳门新葡亰官网 6

  鼠标右键浏览Uesr.svc,在游览器中冒出如下图所示,说明服务配置成功。

澳门新葡亰官网 7

   上图被之http://localhost/User.svc?wsdl虽为我们而引用的劳务地方。

六、在客户端[A服务器]创建服务之援

  咱俩这边坐Web应用程序为例,建立地物理地址为本机,但是大家可想像成B服务器是远程计算机,localhost为一个其它的IP地址。

  新建解决方案,并且创造ASP.NET
Web应用程序的类。命名也:WCFClient,如下图所示:

 

澳门新葡亰官网 8

  (1)新建Asp.net页面,命名为:WcfTest.aspx。

  (2)添加在第五步着布置之劳动之援。如下图所示:

澳门新葡亰官网 9

  这弹出添加服务引用的窗体,如下图所示:

澳门新葡亰官网 10

  我们当地点里写及我们下榻在IIS上的WCF服务之地方服务路径,此处为:http://localhost/User.svc?wsdl,在称呼空间处填写WCFService[此称号空间要在下面的客户端着引用]下一场点击“前往”–>“确定”按钮。此时我们就了针对性劳务之援。我们更翻开解决方案,里面大多了Service
References的文书夹,通过资源管理器打开后其中大多了数文件,这些文件用于客户端向劳动端的调用,现在先期不用无他。

 七、使用WCF服务端的法子

  WcfTest.aspx的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

//引用WCF服务的名称空间
using WCFClient.WCFService;

namespace WCFClient
{
    public partial class WCFTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnClick(object sender, EventArgs e)
        {
            UserClient user = new UserClient();
            string result = user.ShowName(this.txtName.Text);
            Response.Write(result);
        }
    }
}

点中之UserClient类是于丰富援的时候别的劳务端User类的客户端代理类,一般客户端代理类名称都见面是**Client。我们运行一下圈下效果。

澳门新葡亰官网 11

  澳门新葡亰官网通过以上的例子,我们做到了是因为A服务器的动向B服务器中WCF提供的方法的调用。这个例子比较简单,对于常开B/S结构应用程序的同学等的话比较好理解。

八、说明:盖网上的入门教程比较少,本学科只开入门,后面会持续讲来其它入门的东西,深入的乞求圈园子里:Artech 大哥之稿子。

九、代码下载:

  10 WCF
教程

 

初稿链接:http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html

澳门新葡亰官网WCF

  WCF(Windows Communication
Foundation)是由于微软开之一样密密麻麻支持数据通信的应用程序框架,可以翻为Windows通信开发平台

  WCF整合了老的Windows通信的.net Remoting
,WebService,Socket机制,并融合有HTTP和FTP的系技能。WCF是指向这些技术的联合。

WCF的优点

   统一性

   互操作性

   安全以及可凭借

   兼容性

   

明白面向服务

   SOA(Service Oriented Atchitecture)面向服务架构
 。是恃以化解在Internel环境下业务集成的消,通过连接能够做到一定任务的单身功能实体实现之平等栽软件系统架构。SOA是一个零件模型,将应用程序的异功能单元(称为服务)通过这些劳务中间定义美的接口及契约关系起来

 
 SOA指出目前系统应足够灵活,从而允许在无打乱当前打响运行的系布局与基本功结构前提下,改动已经有的体系布局。

   SOA有如下原则

       边界清楚

       服务自治

       兼容性基于政策

       共享模式(schema)和契约

 

WCF框架组成

   1.协定(契约)

     
契约来定义双方关系的协商,契约必须为接口的章程来反映,而实际上的服务代码必须要由这些契约接口派生并促成,

     契约可分为以下4种:

       1.数契约(Data
Contract):指定双方联系时之数码格式

       2.劳务契约(Service Contract):指定服务之定义

       3.操作契约(Opration Contract):指定服务提供的办法

       4.信契约(MessageContract):指定在通信期间改写信息内容的正式

       契约定义消息网的各个方面

          (1).数据契约:服务中的参数

          (2).消息契约:使用SOAP协议一定的音部分

          (3).服务契约:服务中之不二法门

         
(4).策略与绑定:策略设置安全还是其它条件,绑定指定传输方式与编码。

   2.劳务运作

      服务运行期间的表现控制

          (1).限制行为:控制处理的消息数

          (2).错误行为:出现其中错误时所处理的操作

          (3).元数据表现:是否为他提供元数据及元数据的供方式

          (4).实例行为:可运行的劳务实例数目

          (5).事务行为:处理事务

          (6).调度行为:控制WCF处理消息之点子

   3.消息传递

     
 消息传递层说明数据的交换格式和导模式。消息传递层由通道(信道)组成,通道是对信息进行处理的零件,负责为同等的计对信息进行整及传递。通道用于传输层,协议层及信息得到。各层次之坦途组成了信道栈

     
 通道对信息和消息头进行操作,服务运行时对信息正文进行操作。通道包括个别种植类型:传输通道以及磋商通道。

             
传输通道:读取和描写副来自网络的音,传输通道通过编码器将消息转换为网络传输使用的字节流以及用字节流转换为信息。传输通道包括HTTP通道,命名管道,TCP,MSMQ等

              协议通道:通过读取或写副消息头的方法来实现信息协议。比如
WS-Security。WS-Reliability

   4.宿主与激活

       
 服务宿主负责WCF服务的生命周期和上下文的操作系统进程,负责启动暨已WCF服务,并提供控制服务的核心管理功能。

 

WCF的根底概念

     1.地址

      2.绑定(Binding)

      3.契约(Contract)

      4.终结点

       
 用来发送或收受信息(或实施就简单种操作)的结构,终结点包含一个定义消息可以发送在的目的地位置节点,包含一个定义消息可以发送至之目的地位置(地址),一个叙述消息应怎样发送的通信机制规范(绑定)以及对可以当该岗位发送或收取(或双方都可)的平组消息的定义(服务协定)—该定义还描述了足发送何种消息

       
终结点的地方由EndpointAddress类表示,该类包含一个象征服务地址额统一资源一定符(URI),大多数传的地址URI包含4组成部分。

     
 例:https://home.cnblogs.com/u/1147658/

           方案:https

           计算机:home.cnblogs.com

           端口(可选):

           路径:u/147658

      5.元数据

      6.宿主(Host)

Nginx集群之WCF分布式局域网下

目录

1       大概思路… 1

2       Nginx集群WCF分布式局域网组织图… 1

3       关于WCF的BasicHttpBinding. 1

4       编写WCF服务、客户端程序… 2

5       URL保留项… 6

6       部署WCF服务程序到局域网内3光PC机… 7

7       Nginx集群配置搭建… 8

8       启动WCF客户端程序… 10

9       总结… 11

1       大概思路

l  Nginx集群WCF分布式局域网结构图

l  关于WCF的BasicHttpBinding

l  编写WCF服务、客户端程序

l  URL保留项

l  部署WCF服务程序到局域网内3华PC机

l  Nginx集群配置搭建

l  启动WCF客户端程序

l  总结

2       Nginx集群WCF分布式局域网结构图

有关WCF即可以住宿于IIS,也可自身寄宿,本文采用的凡自己寄宿方式。之所以用自寄宿方式,很充分程度达到,在局部独特的光景,例如下载好文件(如几百MB、1G当)、图片、文档等,如果盖IIS为宿主,可能会见出内存不够用。所以这里用自寄宿的主意呢例。

Nginx集群除了当反往代理可以运用至,在WCF的处理及,也生深好的呈现。以下是Nginx集群于WCF分布式的设计布局图:

澳门新葡亰官网 1

3       关于WCF的BasicHttpBinding

率先了解系统预定义绑定对两样安全模式的支持,具体参照以下该文:

[WCF安全系列]绑定、安全模式和客户端凭证类型:总结篇

https://www.cnblogs.com/artech/archive/2011/05/28/Authentication_034.html

  •   所有的绑定都得不采用任何的安全传输体制,即支持None安全模式;
  •  
    BasicHttpBinding的默认模式呢None,WS相关的绑定默认模式吧Message,而局域网相关绑定的模式模式也Transport;
  •   除了NetNamedPipeBinding,所有的绑定都支持Message安全模式;
  •   对于有支持Message模式的绑定,除了NetMsmqBinding都支持Mixed模式;
  •   除了WSDualHttpBinding,所有的绑定都支持Transport模式;
  •   只有BasicHttpBinding支持TransportCredentialOnly模式;
  •   只有NetMsmqBinding支持Both安全模式。

 这里WCF的Ningx集群,主要用底凡BasicHttpBinding。表示一个绑定,Windows
Communication Foundation (WCF)
服务得使此绑定配置与公开这样的终结点:这些终结点能够跟因 ASMX 的
Web 服务以及客户端和适合 WS-I Basic Profile 1.1 标准的另外服务开展通信。

4       编写WCF服务、客户端程序

l  解决方案的根本目录如下:

澳门新葡亰官网 2

l  WCF服务程序

IOutputSomething.cs

using System.ServiceModel;

namespace Service.Interface
{
    [ServiceContract]
    public interface IOutputSomething
    {
        [OperationContract]
        string GetContentData(int i);

        [OperationContract]
        string GetIpAddress();
    }
}

OutputSomething.cs

using Service.Interface;
using System.Net;
using System.ServiceModel;

namespace Service
{
    [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class OutputSomething : IOutputSomething
    {
        /// <summary>
        /// 名称
        /// </summary>
        string threadNumber;

        readonly object thisLocak = new object();
        public string GetContentData(int i)
        {
            lock (thisLocak)
            {

                threadNumber = i.ToString() + " - " + "我是主机:" + GetIpAddress();
            }
            return string.Format("序列号{0},线程号{1}", i, threadNumber);
        }

        public string GetIpAddress()
        {
            string AddressIP = string.Empty;
            foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
            {
                if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                {
                    AddressIP = _IPAddress.ToString();
                }
            }
            return AddressIP;
        }
    }
}

Program.cs

using Service;
using System;
using System.ServiceModel;

namespace HighlyConcurrentHosting
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(OutputSomething)))
            {
                host.Opened += delegate
                {
                    Console.WriteLine(host.Description.Endpoints[0].Address.Uri + "已经启动,按任意键终止服务!");
                };

                host.Open();
                Console.Read();
            }
        }
    }
}

l  客户端程序

Program.cs

using HighlyConcurrentClient.HighlyConcurrentService;
using System;
using System.Net;

namespace HighlyConcurrentClient
{
    class Program
    {
        static void Main(string[] args)
        {

            string AddressIP = string.Empty;
            foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
            {
                if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                {
                    AddressIP = _IPAddress.ToString();
                }
            }
            Console.WriteLine("本机IP是:" + AddressIP);
            using (OutputSomethingClient proxy = new OutputSomethingClient())
            {
                for (int i = 0; i < 20; i++)
                {
                    Console.WriteLine(proxy.GetContentData(i));
                }
            }
            Console.Read();
        }
    }
}

 

客户端添加服务引用后,Address可能是有平大PC机的IP地址(例如:address=”http://
10.92.202.56:5600/OutputSomething”)这是亟需修改为以下Nginx的地址

address=”http://zhyongfeng.com/OutputSomething",配置如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IOutputSomething" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://zhyongfeng.com/OutputSomething"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IOutputSomething"
                contract="HighlyConcurrentService.IOutputSomething" name="BasicHttpBinding_IOutputSomething" />
        </client>
    </system.serviceModel>
</configuration>

即只要图所示:

澳门新葡亰官网 3

5       URL保留项

当默认的操作系统配置中,Windows Communication Foundation (WCF) 为端口 80
创建而全局看的保存项,使拥有用户还能够运转应用程序,在拖欠应用程序中应用双向
HTTP 绑定来开展双工通信。

澳门新葡亰官网 4

返回了:

“System.ServiceModel.AddressAccessDeniedException”类型的未经处理的异常在 System.ServiceModel.dll 中发生 

其他信息: HTTP 无法注册 URL http://+:5600/OutputSomething/。进程不具有此命名空间的访问权限(有关详细信息,请参见 http://go.microsoft.com/fwlink/?LinkId=70353)。

因管理人方式运行C:\windows\System32\cmd.exe:

netsh http add urlacl url=http://+:5600/ user="\Everyone"
netsh http add iplisten ipaddress=0.0.0.0:5600
防火墙的入站规则:
netsh advfirewall firewall add rule name="5600端口" dir=in action=allow protocol=TCP localport=5600
url保留项删除
netsh http delete urlacl url=http://+:5600/
url保留项显示
netsh http show urlacl

此地要使用如下添加URL保留项即可:

netsh http add urlacl url=http://+:5600/ user="\Everyone"

澳门新葡亰官网 5 

6       部署WCF服务程序到局域网内3贵PC机

远程进行布局WCF服务程序时,需要用她的config配置文件,重新定位address,将默认的IP地址127.0.0.1:5600窜为远程计算机的IP地址:

10.92.202.56:5600、10.92.202.57:5700、10.92.202.58:5800

然后启动远程计算机的WCF服务程序,运行效果如下:

澳门新葡亰官网 6

本机IE上看WCF服务端的运转效果:

澳门新葡亰官网 7

7       Nginx集群配置搭建

透过自主义域名zhyongfeng.com:80端口进行负荷均衡集群访问,则访问C:\Windows\System32\drivers\etc\hosts,添加下列“本机IP
自定义的域名”:

10.93.85.66     zhyongfeng.com

针对WCF部署的多台PC机配置(设置了proxy_connect_timeout为10s,如果中同样宝机down掉了,可以转化到另外一样光机械)如下:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream zhyongfeng.com {
        server    10.92.202.56:5600;
        server    10.92.202.57:5700; 
        server    10.92.202.58:5800;
    }
    server {
        listen       80;
        server_name  zhyongfeng.com;
        location / {
            proxy_pass   http://zhyongfeng.com;
            proxy_connect_timeout       10s;
        } 
    }
}

运行CMD:

D:\DTLDownLoads\nginx-1.10.2>start nginx

D:\DTLDownLoads\nginx-1.10.2>nginx -s reload

访问WCF服务端:http://zhyongfeng.com/OutputSomething/metadata,运行结果:

澳门新葡亰官网 8

8       启动WCF客户端程序

启航WCF客户端程序,运行效果图如下:

澳门新葡亰官网 9

远程桌面关掉其中同样玉10.92.202.56:5600底PC机:

澳门新葡亰官网 10

再开动WCF客户端程序,因为Nginx配置文件设置了proxy_connect_timeout为10s,则关闭的PC机10.92.202.56:5600于10s后会见以它的音转发给10.92.202.57:5700,继续由另外2台PC机执行:

澳门新葡亰官网 11

9       总结

WCF是由微软开支之同系列支持数据通信的应用程序框架,通过开源框架Nginx的组合,能够发出再次多的扩展性。Nginx结合WCF对局域网外之布局有死怪关系,通过WCF整合报表服务器、邮件服务器、文档服务器等,WCF原来就是整治并了本来的windows通讯的
.net
Remoting,WebService,Socket的体制,Nginx让所有分布式功能的WCF更加强了。

源代码下载:

http://download.csdn.net/download/ruby_matlab/10122670

PDF下载:

Nginx集群之WCF分布式局域网应用.pdf

Nginx集群之WCF分布式身份验证(支持Soap)

目录

1       大概思路… 1

2       Nginx集群之WCF分布式身份验证… 1

3       BasicHttpBinding、ws2007HttpBinding. 2

4       Windows证书生成私钥、公钥(X.509证书)… 3

5       编写WCF服务、客户端程序… 7

6       URL保留项… 13

7       部署WCF服务程序到局域网外3光PC机… 14

8       Nginx集群配置搭建… 15

9       SoapUI和WCF客户端程序的运转结果… 16

10     总结… 18

1       大概思路

l  Nginx集群之WCF分布式身份验证

l  BasicHttpBinding、Ws2007HttpBinding

l  Windows证书生成公钥、私钥(x509证书)

l  编写WCF服务、客户端程序

l  URL保留项

l  部署WCF服务程序到局域网外3大PC机

l  Nginx集群配置搭建

l  SoapUI和WCF客户端程序的周转结果

l  总结

2       Nginx集群之WCF分布式身份验证

Nginx是个轻量级的反向代理,当然,也生对应的SSL身份证明。本文主要用同样种自己寄宿的方,使用Nginx集群,通过windows证书(X.509证书),讲述客户端如何看服务器的道。

 

本文源代码主要分类:

l  HighlyConcurrentHosting

利用BasicHttpBinding的源代码(本文主要为这种措施开展Nginx集群)

l  HighlyConcurrentHosting_Ws2007HttpBinding

行使ws2007HttpBinding底源代码(这是一致种植点对碰的Windows认证方式)

l  Nginx配置

nginx.conf

l  Windows证书

wcf_zhyongfeng.cer(客户端需要装的证书)

wcf_zhyongfeng.pfx(服务器需要安装的证件)

 

以下是本文讲述的要布局图:

客户端以BasicHttpBinding进行访问Nginx,然后Nginx进行负荷均衡,将信息分发至后端任意一尊WCF的PC机,后端需要让访的WCF服务器,都设安装Windows证书(仅于拜的服务器需要设置wcf_zhyongfegn.pfx证书)。

澳门新葡亰官网 1 

使因ws2007HttpBinding进行接触对点Windows认证,则Nginx只能够于及经划分IP绑定特定一宝服务器访问的打算,并无克自及集群负载均衡,同时除了服务器如果wcf_zhyongfeng.pfx安装证书外,客户端也亟需开展安装wcf_zhyongfeng.cer证书,这里不作第一讲述。

澳门新葡亰官网 2

3       BasicHttpBinding、ws2007HttpBinding

此间WCF的Ningx集群,主要用之凡BasicHttpBinding。BasicHttpBinding的默认安全模式是None,即没有其他安全设置,消息还为明传送,对客户端也无进行求证。 
但是basicHttpBinding绑定好兑现安全传输,也得透过污染输层和消息层来管信息的安全性。 
basicHttpBinding设置也Transport安全模式,传输层的安是采用IIS的安康机制,比如基本身份验证、集成windows验证、SSL安全通道等等

.NET Framework 3.5 介绍了千篇一律种用于Web
服务交互称为ws2007HttpBinding绑定的初的绑定。这个绑定类似于ws2007HttpBinding绑定除了她支持时的WS-*
消息,安全,可信赖消息和工作专业。

ws2007HttpBinding支持的规范:

WS-SecureConversation v1.3

WS-Security的扩展,为多个消息交换提供一个安全上下文

WS-Trust v1.3

WS-Security的扩展,请求并标记问题,管理可依赖关系。

WS-SecurityPolicy v1.2

WS-Security的安全断言,WS-Security转换以及使用WS-Policy表达的WS-Trust

Web Services Reliable Messaging v1.1

保证消息被传递,适当编码且不会重复接收的协议

Web Services Coordination v1.1

为分布式平台的动作合作提供协议的平台

 

4       Windows证书生成私钥、公钥(X.509证书)

进行C:\Windows\system32,以管理人运行cmd.ext

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Windows\system32>cd C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin>makecert -r -pe -n "CN=wcf_zhyongfeng" -ss My -sky exchange
Succeeded

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin>

澳门新葡亰官网 3

查Windows证书的变迁,开始->运行,输入:

certmgr.msc

澳门新葡亰官网 4

Windows导出wcf_zhyongfeng.pfx服务端证书:

澳门新葡亰官网 5

澳门新葡亰官网 6

澳门新葡亰官网 7

澳门新葡亰官网 8

Windows导出wcf_zhyongfeng.cer客户端证书:

澳门新葡亰官网 9

澳门新葡亰官网 10

澳门新葡亰官网 11

5       编写WCF服务、客户端程序

l  WCF服务程序

Program.cs

using Service;
using System;
using System.ServiceModel;

namespace HighlyConcurrentHosting
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(OutputSomething)))
            {
                host.Opened += delegate
                {
                    Console.WriteLine(host.Description.Endpoints[0].Address.Uri + "已经启动,按任意键终止服务!");
                };

                host.Open();
                Console.Read();
            }
        }
    }

    /// <summary>
    /// 证书验证帐户名,密码
    /// </summary>
    public class UserNamePasswordValidator : System.IdentityModel.Selectors.UserNamePasswordValidator
    {
        public override void Validate(string userName, string password)
        {
            if (userName != "zhyongfeng" || password != "123456")
            {
                throw new System.IdentityModel.Tokens.SecurityTokenException("Unknown Username or Password");
            }
        }
    }
}

服务端配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metadataBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
          <serviceDebug includeExceptionDetailInFaults="true"/>

          <serviceCredentials>
            <!--指定一个 X.509 证书,用户对认证中的用户名密码加密解密-->
            <!--C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin,使用makecert -r -pe -n "CN=wcf_zhyongfeng" -ss My -sky exchange-->
            <serviceCertificate findValue="wcf_zhyongfeng" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="My"/>
            <clientCertificate>
              <!--自定义对客户端进行证书认证方式 这里为 None-->
              <authentication certificateValidationMode="None"></authentication>
            </clientCertificate>

            <!--自定义用户名和密码验证的设置-->
            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="HighlyConcurrentHosting.UserNamePasswordValidator,HighlyConcurrentHosting" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <bindings>
      <basicHttpBinding>
        <!--这个是需要输入用户名密码的-->
        <binding name="YesCertificate">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic"></transport>
            <message clientCredentialType="UserName"/>
          </security>
        </binding>
      </basicHttpBinding>
  </bindings>

    <services>
      <service name="Service.OutputSomething" behaviorConfiguration="metadataBehavior" >
        <host>
          <baseAddresses>
            <add baseAddress="http://127.0.0.1:5600/hello"/>
          </baseAddresses>
        </host>
        <endpoint binding="basicHttpBinding" bindingConfiguration="YesCertificate" contract="Service.Interface.IOutputSomething"/>
        <endpoint binding="basicHttpBinding" bindingConfiguration="YesCertificate" contract="Service.Interface.IOutputSomethingCertificate" />
      </service>
    </services>
  </system.serviceModel>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

 

l  客户端程序

using HighlyConcurrentClient.HighlyConcurrentService;
using System;
using System.Net;

namespace HighlyConcurrentClient
{
    class Program
    {
        static void Main(string[] args)
        {

            string AddressIP = string.Empty;
            foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
            {
                if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                {
                    AddressIP = _IPAddress.ToString();
                }
            }
            Console.WriteLine(string.Format("本机IP是:{0}", AddressIP));
            using (OutputSomethingCertificateClient proxy = new OutputSomethingCertificateClient())
            {

                proxy.ClientCredentials.UserName.UserName = "zhyongfeng";
                proxy.ClientCredentials.UserName.Password = "123456";
                for (int i = 0; i < 20; i++)
                {
                    Console.WriteLine(proxy.GetCertContentData(i));
                }
            }
            Console.Read();
        }
    }
}

客户端配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IOutputSomething">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic" />
          </security>
        </binding>
        <binding name="BasicHttpBinding_IOutputSomethingCertificate">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://zhyongfeng.com/hello" binding="basicHttpBinding"
        bindingConfiguration="BasicHttpBinding_IOutputSomething" contract="HighlyConcurrentService.IOutputSomething"
        name="BasicHttpBinding_IOutputSomething" />
      <endpoint address="http://zhyongfeng.com/hello" binding="basicHttpBinding"
        bindingConfiguration="BasicHttpBinding_IOutputSomethingCertificate"
        contract="HighlyConcurrentService.IOutputSomethingCertificate"
        name="BasicHttpBinding_IOutputSomethingCertificate" />
    </client>
  </system.serviceModel>
</configuration>

客户端添加引用时,会生出

澳门新葡亰官网 12

澳门新葡亰官网 13

澳门新葡亰官网 14

客户端添加服务引用后,Address可能是某个一样令PC机的IP地址(例如:address=”http://
10.92.202.56:5600/hello”)这是要改为以下Nginx的地方

address=”http://zhyongfeng.com/hello”.

不畏如图所示:

澳门新葡亰官网 15

6       URL保留项

详见:http://www.cnblogs.com/yongfeng/p/7851039.html

7       部署WCF服务程序到局域网外3尊PC机

远程进行部署WCF服务程序时,需要双击安装服务器wcf_zhyongfeng.pfx证书、修改config三台机的配备文件:10.92.202.56:5600、10.92.202.57:5700、10.92.202.58:5800

接下来启动远程计算机的WCF服务程序,运行效果如下:

澳门新葡亰官网 16

澳门新葡亰官网 17

本机IE上看WCF服务端的周转效果:

澳门新葡亰官网 18

8       Nginx集群配置搭建

通过自主义域名zhyongfeng.com:80端口进行负荷均衡集群访问,则访问C:\Windows\System32\drivers\etc\hosts,添加下列“本机IP
自定义之域名”:

10.93.85.66    zhyongfeng.com

本着WCF部署的多台PC机配置(设置了proxy_connect_timeout为10s,如果内部同样大机down掉了,可以转正到外一样宝机器)如下:

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream zhyongfeng.com {
        server    10.92.202.56:5600;
        server    10.92.202.57:5700; 
        server    10.92.202.58:5800;
    }
    server {
        listen       80;
        server_name  zhyongfeng.com;
        location / {
            proxy_pass   http://zhyongfeng.com;
            proxy_connect_timeout       10s;
        } 
    }
}

运行CMD:

D:\DTLDownLoads\nginx-1.10.2>start nginx

D:\DTLDownLoads\nginx-1.10.2>nginx -s reload

访问WCF服务端:http://zhyongfeng.com/hello,运行结果:

澳门新葡亰官网 19

9       SoapUI和WCF客户端程序的运转结果

Soap协议,可以使SoapUI测试并补充加WCF的wsdl:http://zhyongfeng.com/hello?wsdl,运行效果如下:

澳门新葡亰官网 20

启航WCF客户端程序,运行效果图如下:

澳门新葡亰官网 21

远程桌面关掉其中同样华10.92.202.56:5600之PC机:

澳门新葡亰官网 22

重启航WCF客户端程序,因为Nginx配置文件设置了proxy_connect_timeout为10s,则关闭的PC机10.92.202.56:5600于10s后会见将它们的音讯转发给10.92.202.57:5700,继续由其他2台PC机执行:

澳门新葡亰官网 23

10             总结

通过运用BasicHttpBinding,除了会让WCF客户端访问之外,还长了WSDL的走访方式。Nginx集群为WCF客户端有用户名密码验证的还要,达到负载均衡分布式处理的成效。

 

源代码下载:

http://download.csdn.net/download/ruby_matlab/10126187

 

PDF下载:

Nginx集群之WCF分布式身份验证(支持soap).pdf

WCF 创建WCF

一、概述

  Windows Communication
Foundation(WCF)是由微软迈入之平等组数据通信的应用程序开发接口,可以翻啊Windows通讯接口,它是.NET框架的如出一辙部分。由
.NET Framework 3.0 开始引入。

  WCF的最终目标是经进程要不同之网、通过本地网络或是通过Internet收发客户和劳动中的音讯。

  WCF合并了Web服务、.net Remoting、消息队列和Enterprise
Services的功用并集成在Visual Studio中。

  WCF专门用于面向服务开发。

仲、基于Asp.net 的应用程序开发及面向服务付出

图片 1

  在冲Asp.net
的应用程序开发被,我们是因为客户机的浏览器访问应用程序服务器,然后通过应用程序服务器被的数据库连接去老是数据库服务器,读取或是操作数据,有时候可能会见多一个文件服务器。大家可以考察到,基本上有的使都置身了扳平光服务器上,但对于一个,由于事务达到之需(如:与外表系统相互),一雅服务器很为难支撑具备的应用。我们再拘留下的觊觎:

图片 2

  客户机使用浏览器访问服务器A,服务器A为了工作要与其他各种以部署于服务器B、C、D….又经过WCF技术并行通信,相互访问…然而面向服务的裨益不仅仅在这个,他尚提供了不同语言不同操作系统的可是交互性..由于本文不是介绍SOA的稿子,感兴趣的同学可以瞻仰:SOA

三、第一个WCF程序

  1.
新成立空白解决方案,并以化解方案被新建项目,项目类别为:WCF服务应用程序。建立好后如下图所示:

图片 3

  2.剔除系统生成的个别个文件IService1.cs同Service1.svc。

  3.添加由定义之WCF【服务文件】User.svc,此时vs2010会晤自动生成WCF接口文件IUser.cs,我们在IUser中定义WCF方法ShowName,在User.svc.cs对该接口的点子进行落实。

代码如下:

using System.ServiceModel;

namespace WCFService
{
    [ServiceContract]
    public interface IUser
    {
        [OperationContract]
        string ShowName(string name);
    }
}


namespace WCFService
{
    public class User : IUser
    {
        public string ShowName(string name)
        {
            string wcfName = string.Format("WCF服务,显示姓名:{0}", name);
            return wcfName;
        }
    }
}

大家可以视,在WCF中的接口和平常接口的界别仅在有限个达标下文,其他的和我们如常上学之接口一样。定义之上下文要补加System.ServiceModel的援。

[ServiceContract],来证明接口是一个WCF的接口,如果非加的话,将非能够于表面调用。

[OperationContract],来说明该方法是一个WCF接口的办法,不加的言语与齐。 

此刻我们的首先单WCF服务程序就成立好了,将User.svc“设为打始页”,然后F5周转一下试试,如下图所显示,VS2010活动调用了WCF的客户端测试工具以便我们测试程序:

图片 4

  我们双击上图中之 ShowName() 方法,出现如下图:

图片 5

  于请窗口中之价备受输入参数“你的真名”,然后点击“调用”,在响应窗口中会起返回值“WCF服务,显示姓名:你的全名”,说明测试成功,点击下面的XML也可以见到XML的数据传。我们今天树好了劳务的应用程序和作业逻辑,即非常简单的打印姓名的不二法门,测试呢成了。那么我们怎么用也?

四、场景

  我们统筹之景是在产面临不时以之景象,把WCF程序寄宿在IIS之上。假设场景如下:A服务器和B服务器。我们拿咱刚建立的WCF程序“部署”在B服务器上(本课程的A,B服务器都放是自家好之一模一样令机械),我们的靶子是在A服务器的应用程序来访问B服务器的WCF程序,实现劳务器端的应用程序通讯。

五、将WCF程序寄宿在B服务器的IIS之上

  率先我们用WCF应用程序发布一下,然后部署在B服务器的IIS之上,如下图所示:

图片 6

  鼠标右键浏览Uesr.svc,在游览器中出现如下图所示,说明服务配置成功。

图片 7

   上图备受之http://localhost/User.svc?wsdl就为我们如果引用的劳动地方。

六、在客户端[A服务器]创服务的援

  俺们这里以Web应用程序为例,建立地物理地址为本机,但是大家可以想像成B服务器是长途计算机,localhost为一个外的IP地址。

  新建解决方案,并且创办ASP.NET
Web应用程序的花色。命名也:WCFClient,如下图所示:

 

图片 8

  (1)新建Asp.net页面,命名为:WcfTest.aspx。

  (2)添加于第五步着配备的劳务之援。如下图所示:

图片 9

  这弹出添加服务引用的窗体,如下图所示:

图片 10

  我们以地方里写及我们下榻在IIS上的WCF服务之地点服务路径,此处为:http://localhost/User.svc?wsdl,在名称空间处填写WCFService[此号空间要在下面的客户端挨引用]下一场点击“前往”–>“确定”按钮。此时咱们做到了针对性劳务之援。我们重查看解决方案,里面基本上矣Service
References的公文夹,通过资源管理器打开后中大多矣数文件,这些文件用于客户端向劳动端的调用,现在优先不用无他。

 七、使用WCF服务端的法子

  WcfTest.aspx的代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

//引用WCF服务的名称空间
using WCFClient.WCFService;

namespace WCFClient
{
    public partial class WCFTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnClick(object sender, EventArgs e)
        {
            UserClient user = new UserClient();
            string result = user.ShowName(this.txtName.Text);
            Response.Write(result);
        }
    }
}

面中之UserClient类是在丰富引用的当儿别的劳务端User类的客户端代理类,一般客户端代理类名称还见面是**Client。我们运行一下押下力量。

图片 11

  通过以上之例证,我们做到了是因为A服务器的利用向B服务器中WCF提供的不二法门的调用。这个事例比较简单,对于常开B/S结构应用程序的同校等的话比较好明。

八、说明:盖网上的入门教程比较少,本学科只开入门,后面会持续说道来其它入门的东西,深入之求圈园子里:Artech 大哥之篇章。

九、代码下载:

  10 WCF
教程

 

原文链接:http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html

澳门新葡亰官网WCF 之部署(2010本子之上)

第一,在WIN系统下开拓IIS,每种操作系统是例外的,请不要做瞎。

1、控制面板—左下放的顺序—启用或关闭Windows功能,如图:

 

澳门新葡亰官网 1

2、找到Internet Information
Services,其中FTP服务器,WEB管理工具下面的拥有文件夹和其子文件夹全选,令万维网服务中之安全性、常见HTTP功能、性能功能全选。如下图:

澳门新葡亰官网 2

再有,应用程序开发功能勾选状态如图:

澳门新葡亰官网 3

运行状况诊断下都无勾选。

除此以外,Win8与Win7不同之处在于这个,即,在启用或关闭Windows功能界面的顶端,有.NET
Framework4.5高档服务,其勾选状态应当如下图:

澳门新葡亰官网 4

至今,系统所待之IIS环境应当已经怀有

一、用VS2013启动IIS EXPRESS

 选中列,不是选中某个文件,然后附加到浏览其运转(单击平时调试普通程序的死去活来绿色三角)

澳门新葡亰官网 5

浏览器会产生如下界面:

澳门新葡亰官网 6

单击中部位置的Service.svc.cs,浏览器呈现如下界面:

澳门新葡亰官网 7

表示VS已经为你开始了一个劳务,并且告诉了公怎么样在客户端调用。到上的地址便是我红线中标识出来的那个蓝色连接。到时刻以客户端程序中添加进去就得了。

老二、部署及地面IIS

就此管理员身份打开VS2013

然后右键工程名字,选择属性,弹出对话框,在左侧选择web选项卡,然后于画红框处的组合框中摘安排及地头IIS,如图:

澳门新葡亰官网 8

记住项目URL。

下一场单击左侧的包裹/发布网页选项卡,在“要安排的类型适用于具有配置方法”中挑选“仅限制运行是应用程序所要的文书”,如图:

澳门新葡亰官网 9

下一场按照F5,就配备至本地IIS了,把上达成图那个URL复制到浏览器,就是见证奇迹的天天了。

其三、部署至远程服务器

条件:本地:VS2013+WIN8.1(操作系统无关系的)

远程:windows server2012(安装好IIS)

1、本地操作:

右键单击工程,单击宣布,在弹出的窗口被,单击(默认)左侧的部署文件,单击于定义,然后把种受到的布局文件之名输上,如图:

澳门新葡亰官网 10

下一场选取左侧连接,发布办法选择文件系统,目标位置选而嗜的本地文件夹,到时刻会发布于拖欠公文夹下,如图:

澳门新葡亰官网 11

下一场单击左侧安装,选择Relase,如图:

澳门新葡亰官网 12

然后单击预览,基本没什么操作,单击宣布,如图:

澳门新葡亰官网 13

这么,在刚才选的文书夹下面就意识了以下几独东西:

我的是D:\Secpayment

澳门新葡亰官网 14

以包含这三单宝的文书夹拷贝到长途服务器上,我少还在了C盘。如此,本地操作完。

2、服务器操作:

以服务器中开拓web publish service
服务,怎么打开就是不演示了,我呢忘记了。。。看官你查看怎么打开服务就是尽了。

下一场打开IIS管理器,单击左侧的应用程序池,点击后晚,右侧有只装应用程序池默认设置,点开始,然后设置为v4.0,如图:

澳门新葡亰官网 15

继,右键单击左侧的“网站”,点击添加网站,弹出如下窗口:

澳门新葡亰官网 16

网站称即使即将当左手展示的,物理路径就是是公拷贝到服务器的酷文件夹。IP请捎而远程访问服务器的杀IP,端口的话,你的80无能够就此便换8080.

顾:要单击测试设置,可能会见产出如下提示:

澳门新葡亰官网 17

 

为验证授权,关掉这个窗口,在齐达成图被,单击连接为,在弹出的窗口里摘特定用户,单击设置。输入而登录服务器的账号密码即可:

从此以后验证如图:

澳门新葡亰官网 18

下一场倒闭这个,就得颁发了。但是当浏览网站经常发现,说禁用头数据公布了。那咱们看一下布置文件:

澳门新葡亰官网 19

率先只红线出,

serviceMetadata httpGetEnabled=”true”
设置也true,而后面https的好一定要是安装为false,因为~~服务器无支持。

保存。然后在IIS管理器中,右键单击刚才的网站,管理网站–浏览,OK了。

澳门新葡亰官网 20

注意:

IIS 7访问的时出现以下很:

切莫可知于是路中采取这配置节。如果当爸爸级别上锁定了该节,便会起这种状态。锁定是默认设置的(overrideModeDefault=”Deny”)……

 

釜底抽薪方案:

 

为 IIS 7 采用了还安全之 web.config
管理机制,默认情况下会锁住配置起无容许更改。

运作命令行 

C:\windows\system32\inetsrv\appcmd
unlock config -section:system.webServer/handlers 
中的 handlers 是错误信息中红字显示的节点名称。
若果modules也让锁定,可以运作

C:\windows\system32\inetsrv\appcmd
unlock config -section:system.webServer/modules

小心:cmd.exe要坐管理员身份启动,在c:\windows\system32生找到cmd.exe,右键管理员启动,输入上面的指令即可。

 

澳门新葡亰官网WCF 之配备(VS2010)

一致、 环境vs2010,WCF应用程序,server 2008

先是步:WCF项目右键点击项目,选择生成部署包,如下图:

澳门新葡亰官网 1

 

老二步:WCF项目落得右键,选择:在windows资源管理器中开拓文件夹,如下图:

澳门新葡亰官网 2

 

老三步:第二步:在公种所当的文件目录下找到Package文件夹,这就算是咱的配备确保所于的地方。在是package文件夹下面来一个packageTmp。

澳门新葡亰官网 3

澳门新葡亰官网 4

 

季步:在IIS上新建虚拟目录,将物理地址指为这个文件夹。

1、windows server 2008中没有自带Microsoft .NET Framework
4,因此待在网上下载,手动安装,安装时右键选择管理员身份运行。

下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=17718

2、完成.NET Framework 4后,重开服务器

3、在IIS上新建虚拟目录

澳门新葡亰官网 5

澳门新葡亰官网 6

点击确定,完成

4、第四管辖:部署完毕。可以于浏览器中查看我们配备的WCF了。

澳门新葡亰官网 7

哈哈,结果。。。。

澳门新葡亰官网 8

当即是承诺为默认的net版本不对,修改章程如下:

澳门新葡亰官网 9

修改后,右键浏览,效果如下:

澳门新葡亰官网 10

齐图澳门新葡亰官网中的http://localhost/Test.svc?wsdl即为我们要引用的服务地址。

专注:如果在别的机器上引用该机的WCF服务经常,需要将localhost替换为该机的ip。

 

初稿链接:http://blog.csdn.net/jiankunking

WCF WCF的宿主

一致、WCF服务应用程序与WCF服务库

  我们在平时支出的进程被常用之种项目有“WCF
服务应用程序”和“WCF服务库”。

  WCF服务应用程序,是一个方可实施之次第,它发出单独的长河,WCF服务类契约的概念,可以一直观看运行的效果。此种模板基于IIS托管的先后,如以系列的第一节省所展示。在开基于IIS托管的WCF服务程序时,比较多表现,自学的时节呢可采取这种类型,简单容易亮。

  WCF服务库,可以看是一个富含WCF服务与契约定义的类库。不能够直接运行,你得以任何类里引用,在宿主里启用托管是库房,有接触类似于我们当Web项目面临利用之类库。考虑WCF服务统筹之早晚,服务类的定义为单独的库,可以吗其他种类下。提高代码的复用性。

  当然你为可改这些代码,比如将WCF服务程序里的切近,移到一个单独的类库里,或是把类库里的类移到WCF服务程序中。

二、概述

  通过前的介绍我们清楚,WCF在运行时必寄宿在“宿主程序”之上,WCF本身不可知单独运行(每个WCF服务必须宿主在一个Windows进程被)。.net
提供了余宿主供WCF运行,WCF还是非常灵活的。

澳门新葡亰官网 1

  WCF的宿主可以是 Windows 服务、COM+应用程序、WAS(Windows Activation
Services,Windows进程激活服务)或IIS、Windows应用程序,或略的控制台应用程序及任何.net程序。

  这节的言传身教我们重新成立WCF类库项目也条例做示范,名称为:WCFLibrary,并去自动生成的少数只文件(IService1.cs、Service1.cs)。如下图所示:

澳门新葡亰官网 2

  鼠标右键查看项目性质。我们发现,其实“WCF类库项目”与我们平常树立的“类库项目”都是类库,只不过多了WCF的类库项目于新建时差不多矣片只dll的援(System.ServiceModel.dll、System.Runtime.Serialization.dll)和一个自动生成的布置文件(该配置文件就用于调试时行使,在WCF寄宿以后会采取宿主的配备文件及另应用程序通信)。这更说明了俺们以做分式程序支付的时刻和我们平素支出之应用程序没有多好的分别,只要我们以应用程序间通信时“符合WCF的预定”即可。

  服务端我们还与第一个科目一样(IUser接口与User实现),只建立一个计做啊咱调用的以身作则代码如下:

//添加引用
using System.ServiceModel;

namespace WCFLibrary
{
    [ServiceContract]
    interface IUser
    {
        [OperationContract]
        string ShowName(string name);
    }
}

namespace WCFLibrary
{
    class User : IUser
    {
        public string ShowName(string name)
        {
            string wcfName = string.Format("WCF服务,显示姓名:{0}", name);
            return wcfName;
        }
    }
}

出于本的契约为IService,现在的也IUser,所以安排文件来零星处于使修改为:

<service name=”WCFLibrary.User”>

<endpoint address=”” binding=”wsHttpBinding”
contract=”WCFLibrary.IUser”>

点击“F5“运行效果使下图所示说明成功:

澳门新葡亰官网 3

二、IIS宿主

  我们以第一节省中,把WCF寄宿在IIS之上,在IIS中宿主一个服务的机要优点是当闹客户端请求时宿主进程会吃自动启动,并且你得依赖IIS来管理宿主进程的生命周期。在出与用的长河以及Web
Service非常相像。

、控制台应用程序宿主

  建立宿主

  (1)在解决方案下新建控制高出口项目 WCFHost_Console。

  (2)添加 System.ServiceModel.dll 的引用。

  (3)添加 WCF 服务类库(WCFLibrary)的项目援。

  (4)创建宿主程序,代码如下:

using System;
using WCFLibrary;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace WCFHost_Console
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建宿主的基地址
            Uri baseAddress = new Uri("http://localhost:8080/User");
            //创建宿主
            using (ServiceHost host = new ServiceHost(typeof(User), baseAddress))
            {
                //向宿主中添加终结点
                host.AddServiceEndpoint(typeof(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();
            }
        }
    }
}

(5)运行宿主程序[每当客户端调用时如先运行宿主程序],如下图所示:

澳门新葡亰官网 4

  说明宿主建立成。在上例中之所以到”ServiceHost”类,这里只是简短的应用,具体求查看”MSDN
ServiceHost”。

  建立客户端

  (1)重新确立解决方案–>Web应用程序项目。

  (2)添加对服务之援(在援上右键–>输入我们定义之劳动宿主的基地址(此处为:http://localhost:8080/User)–&gt;前往–&gt;确定),具体请看第一节。

澳门新葡亰官网 5

  (3)测试程序要下图所示说明成功(注意:一定要先行运行我们的宿主程序才行,如果宿主没有打开的话会报错:由于目标计算机积极拒绝,无法连接。)。

澳门新葡亰官网 6

  以是示例中我们拿Endpoint中之ABC,基地址,Behaviors等还直接写于了代码里,但实质上利用过程被还是错过因配置文件,为了对比说明我们下的例证中见面使用安排文件。

**四、Windows应用程序宿主 **

  建立宿主

  (1)在缓解方案下新建Windows窗体应用程序项目 WCFHost_Form。

  (2)添加 System.ServiceModel.dll 的引用。

  (3)添加 WCF 服务类库(WCFLibrary)的门类援。

  (4)添加应用程序配置文件App.config。

  (5)创建宿主程序MainForm窗体,并修改App.config,代码如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="WCFLibrary.User">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8081/User"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="wsHttpBinding" contract="WCFLibrary.IUser"></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>


using System;
using WCFLibrary;
using System.ServiceModel;
using System.Windows.Forms;
using System.Configuration;

namespace WCFHost_Form
{
    public partial class MainForm : Form
    {
        ServiceHost host;

        public MainForm()
        {
            InitializeComponent();
        }

        //应用程序加载
        private void MainForm_Load(object sender, EventArgs e)
        {
            host = new ServiceHost(typeof(User));
            //打开宿主
            host.Open();
            this.lblState.Text = "WCF中的HTTP监听已启动....";
        }

        //应用程序关闭
        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
        {
            host.Close();
        }
    }
}

运行程序一旦下图所示:

澳门新葡亰官网 7

  建立客户端

  及上边的Console程序一样,这里而引用的地方为:<add
baseAddress=”http://localhost:8081/User"/&gt;

  在是例子中以及Console应用程序不同的凡,我们于Console配置是直写以程序中的,而当本例中我们应用之是安排文件,区别在于一旦写在配置文件中程序运行时一直到布置文件里取出相关的配备节去创建ServiceHost类。

五、WAS宿主

  Windows 进程激活服务 (WAS)
概述.aspx)  

  IIS7允许通过HTTP外的商谈进行激活和网通信。此环境入开发而通过WCF支持之外网络协议(包括http、net.tcp、net.pipe、net.msmq)进行通信的WCF服务。部署简单、管理好,这些网络协议在安排时可像Http一样,直接丢弃到IIS7达到即可,我们于底下的例子中为net.tcp为商也条例。IIS7以下的版只能支持Http的通信。

  1、确保已经装IIS7的激活零部件

  以动用WAS宿主时,必须保证IIS7的激活零部件安装好。打开“控制面板”–>“打开或关闭Windows功能”–>“功能”,我的机器上业已设置了,如下图所示(WCF激活与非WCF激活):

澳门新葡亰官网 8

  如果没安装,点击“添加新职能”,然后勾选“WCF激活”,如下图所示:

澳门新葡亰官网 9

  安装成功后我们打开IIS,点击“默认网站(任一个网站即可)”–>“绑定”–>“添加”,在档次中会出现非IIS支持的别样种类。如下图所示

澳门新葡亰官网 10

  说明安装成功。

  2、添加net.tcp的网站绑定

  于齐图中,我们捎品种net.tcp,然后以绑定信息遭受填入“808:*”,点击确定。

  3、开通net.tcp的协议 

  在安成功而于指定的网站及绑定了net.tcp以后,我们还要起通.net.tcp协议,点击我们如果布局WCF的网站,在IIS管理器的操作功能区有雷同起“高级设置”点击后面世如下图所示高级配置的窗体

澳门新葡亰官网 11

  在启用的情商中加上net.tcp协议(原来就针对http协议支持,现在拿tcp协议追加上去),中间用逗号隔离开,如达到图所著。

  注意:这几乎单步骤一个乎非克少,否则会冒出:“寻不顶独具绑定
NetTcpBinding 的终结点的及方案 net.tcp 匹配的基址。注册的基址方案是
[http]
”的错误信息。

   4、建立服务程序

  (1)在解决方案下新建WCF服务应用程序项目 WCFHost_WAS。

  澳门新葡亰官网(2)建立IUser与User,代码同例二相同。

  (3)修改配置文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="netTcpBindConfig">
          <security mode="None">
            <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
            <message clientCredentialType="Windows" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="MyBehavior" name="WCFHost_WAS.User">
        <endpoint address="" binding="netTcpBinding" contract="WCFHost_WAS.IUser" bindingConfiguration="netTcpBindConfig"></endpoint>
        <!--元数据交换的终结点-->
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" ></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyBehavior" >
          <serviceMetadata/>
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="6553600"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

(5)部署服务

  像任何的Web应用程序一样,把相关的文书丢到服务器端指定目录即可。

  鼠标右键浏览User.svc,如现如下所示:

澳门新葡亰官网 12

  说明部署成功,如齐所著之服务地方为:net.tcp://服务器名/User.svc/mex

  (6)建立客户端

  成立客户端也与其他的相同,如下图所示:

澳门新葡亰官网 13

  我们这看客户端的布置文件:

<client>
      <endpoint address="http://localhost:8080/User" binding="wsHttpBinding"
        contract="WCFHost_Console.IUser" />
      <endpoint address="http://localhost:8081/User" binding="wsHttpBinding"
        bindingConfiguration="WSHttpBinding_IUser" contract="WCFHost_Form.IUser"
        name="WSHttpBinding_IUser">
        <identity>
          <userPrincipalName value="WIN-EOUTAA4CP4O\Administrator" />
        </identity>
      </endpoint>
      <endpoint address="net.tcp://win-eoutaa4cp4o/User.svc" binding="netTcpBinding"
        bindingConfiguration="NetTcpBinding_IUser" contract="WCFHost_WAS.IUser"
        name="NetTcpBinding_IUser" />
    </client>

咱们于一个Web应用程序中调用了三种植不同宿主的服务。 

七、总结

  通过地方的几个例证,我们落实了控制台宿主、Form宿主、WAS宿主(基于TCP协议)的兑现。在实际的出过程遭到,有时候我们尚见面就此到因Windows服务的宿主,但大部分卖都运IIS做宿主,方便、快捷。

 

初稿链接:http://www.cnblogs.com/iamlilinfeng/archive/2012/10/01/2706353.html

因IIS的WCF

(1)创建WCF服务应用程序

(2)配置IIS

用WCF服务应用程序配置IIS网站,需要使用.net4.0聚集成版本的程序池

(3)使用SvcUtil.exe生成客户端代码和布置

  SvcUtil.exe是一个VS命令行工具,该工具在:C:\Program
Files\Microsoft  SDKs\Windows\v7.0A\bin 或 C:\Program Files
(x86)\Microsoft
SDKs\Windows\v7.0A\bin\相似情形下我们用SvcUtil.exe添加到VS开发工具中方就后的施用(也可径直以该命令行工具)。在VS中的
Tools菜单—选择External
Tools,打开管理窗口。在Title中输入SvcUtil,Command中摘SvcUtil.exe全路线,Initial 
directory栏选择变的客户端代码和部署文件所推广之目(此处为化解方案所于目),选上Prompt
for arguments,不选择上Close on 
exit。点击OK.添加完成后,在VS的家伙下会冒出这个菜单。在Client端添加对服务之援。打开SvUtil工具,在Arguments里填服务之地点,点击OK。此时代理类和配备文件于下充斥及解决方案的大体目录中。

(4)配置客户端代码

WSHttpBinding binding = new WSHttpBinding();

EndpointAddress address = new
EndpointAddress(“http://192.168.4.179:8888/LimsDBService.svc”);

LimsDBServiceClient lims = new LimsDBServiceClient(binding, address);

lims.Open();

string sql = “select sample_id,material_type from nais_all_samples
where sample_id=” + this.txtQuery.Text.Trim();

DataTable dt = lims.GetDataSet(sql).Tables[0];

lims.Close();

this.gvData.DataSource = dt;

this.gvData.DataBind();

网站地图xml地图