WCF入门(一)——终结点,地址,绑定(1)

简介: 运行WCF服务 这里通过自宿主方式self-host来运行wcf服务。 公开终结点Endpoint,终结点由ServiceEndpoint 类来实现。它有很多的成员。其中要用到的是所说的ABC。 Address,Binding,Contract,地址,绑定,契约。

运行WCF服务

这里通过自宿主方式self-host来运行wcf服务。

公开终结点Endpoint,终结点由ServiceEndpoint 类来实现。它有很多的成员。其中要用到的是所说的ABC

AddressBindingContract,地址,绑定,契约。

 

(一)Address

其中的Address,由EndpointAddress 来实现,它有很多成员:

·Uri 用于获取终结点的地址

·Identity 获取用于验证终结点的标识

·Headers 用来创建终结点地址标头集合

除了这几个还有其它一些属性:

ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/fxref_system.servicemodel

/html/8947f21b-7f57-fb56-512e-25554808d870.htm

 

地址是用来公开终结点地址的,这个地址的配置可以由编程式实现,或由xml配置文件配置实现。地址可以分为相对地址和绝对地址。下边说明一下两种实现方式:

(1)编程方式实现

Uri _baseAddress = new Uri("http://localhost:8731/FirstService");

ServiceHost host = new ServiceHost(typeof(CaculateService), _baseAddress);

EndpointAddress address = new EndpointAddress(_baseAddress);

host.Description.Endpoints[0].Address = address;

 

这里用一下Headers属性:

ServiceHost host = new ServiceHost(typeof(CaculateService));

AddressHeader header1 = AddressHeader.CreateAddressHeader

("header_xxx", "namespace_xxx", "value_xxx");

AddressHeader header2 = AddressHeader.CreateAddressHeader

("header_yyy", "namespace_yyy", "value_yyy");

AddressHeader[] headers=new AddressHeader[]{header1,header2};

EndpointAddress address = new EndpointAddress(_baseAddress,headers);

host.Description.Endpoints[0].Address = address;

 

下边我截取soap头部分内容,可以看到:

<header_xxx a:IsReferenceParameter="true" xmlns="namespace_xxx">

value_xxx

</header_xxx>

<header_yyy a:IsReferenceParameter="true" xmlns="namespace_yyy">

value_yyy

</header_yyy>

我们在soap头中添加了一些头信息。然后,在客户端:

foreach (AddressHeader header in client.Endpoint.Address.Headers)

{

Console.WriteLine(

header.Name + " " +

header.Namespace + " " +

header.GetValue<string>());

}

 

输出:

header_xxx namespace_xxx value_xxx

header_yyy namespace_yyy value_yyy

(2)Xml配置文件

现在在app.config文件中进行配置,配置基地址,同时配置元数据发布,及soap头两条信息:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

    <system.serviceModel>

        <behaviors>

            <serviceBehaviors>

                <behavior name="FirstService.CaculateServiceBehavior">

                    <serviceMetadata httpGetEnabled="true" />

                    <serviceDebug includeExceptionDetailInFaults="true" />

                </behavior>

            </serviceBehaviors>

        </behaviors>

        <services>

            <service behaviorConfiguration="FirstService.CaculateServiceBehavior"

                name="FirstService.CaculateService">

                <endpoint

address=""

binding="wsHttpBinding"

contract="FirstService.ICaculateService">

                    <headers>

                        <header_xxx>self_xxx</header_xxx>

                        <header_yyy>self_yyy</header_yyy>

                    </headers>

                    <identity>

                        <dns value="localhost" />

                    </identity>

                </endpoint>

                <host>

                    <baseAddresses>

                        <add baseAddress=

"http://localhost:8731/FirstService/CaculateService/" />

                    </baseAddresses>

                </host>

            </service>

        </services>

    </system.serviceModel>

</configuration>

 

在这里的配置与编程方式是一样的。如果不熟悉这种配置方式,可以通过WCF服务配置编辑器来进行。

位置:工具-》WCF服务配置编辑器

 

在客户端得到的结果为:

header_xxx  self_xxx

header_yyy  self_yyy

 

因为没有为两个头指定名字空间,所以为空。

地址指定了终结点的位置,让客户端可以找到终结点,而终结点公开了服务。

(二)Binding

绑定,提供了通信的细节:

·传输,传输协议用Http,还是Tcp,或是IPC等等

·消息编码格式,这里的编码格式是指:二进制,文本,MTOM

·安全

系统提供了一些绑定。这里列举几个:

绑定

配置元素

说明

BasicHttpBinding

<basicHttpBinding>

一个绑定,适用于与符合WS-BasicProfileWeb服务(例如,基于ASP.NETWeb服务(ASMX)的服务)进行的通信。此绑定将HTTP用作传输协议,并将文本/XML用作默认消息编码。

WSHttpBinding

<wsHttpBinding>

一个安全的、可互操作的绑定,适合于非双工服务协定。

WSDualHttpBinding

<wsDualHttpBinding>

一个安全且可互操作的绑定,适用于双工服务协定或通过SOAP媒介进行的通信。

NetTcpBinding

<netTcpBinding>

一个安全且经过优化的绑定,适用于WCF应用程序之间跨计算机的通信。

NetNamedPipeBinding

<netNamedPipeBinding>

一个安全、可靠且经过优化的绑定,适用于WCF应用程序之间计算机上的通信。

NetMsmqBinding

<netMsmqBinding>

一个排队绑定,适用于WCF应用程序之间的跨计算机的通信。

NetPeerTcpBinding

<netPeerTcpBinding>

一个启用安全的多计算机通信的绑定。

MsmqIntegrationBinding

<msmqIntegrationBinding>

一个适合于WCF应用程序和现有消息队列应用程序之间的跨计算机通信的绑定。

 

ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/

wcf_con/html/2c243746-45ce-4588-995e-c17126a579a6.htm

 

这里说一下:BindingElement类型:用于为各种类型的通道生成通道工厂和通道侦听器以处理传出和传入消息的绑定元素。这是一个抽象基类,而绑定是由一组继承自抽象基类BindingElement的有序元素组成。

这里列举一下:

OneWayBindingElement

TransportBindingElement

CompositeDuplexBindingElement;

StreamUpgradeBindingElement

PrivacyNoticeBindingElement

UseManagedPresentationBindingElement

ReliableSessionBindingElement

SecurityBindingElement

MessageEncodingBindingElement

PeerResolverBindingElement

TransactionFlowBindingElement

ContextBindingElement

 

 

这里再说明一些:

1)编码MessageEncodingBindingElement

BinaryMessageEncodingBindingElement

用于指定编码消息时所采用的.NET二进制XML格式的绑定元素

MtomMessageEncodingBindingElement

指定消息传输优化机制(MTOM)消息所使用的编码和版本管理的绑定元素

TextMessageEncodingBindingElement

绑定元素,指定用于基于文本的SOAP消息的字符编码与消息版本管理

WebMessageEncodingBindingElement

WindowsCommunicationFoundation(WCF)绑定中使用纯文本XMLJavaScript对象表示法(JSON)消息编码以及原始二进制内容时,能够对其进行读写

 

2)传输TransportBindingElement

3)事务TransactionFlowBindingElement

4)安全SecurityBindingElement

5)可靠性 ReliableSessionBindingElement

下边提供一个列表。

绑定

传输

编码

互操作

BasicHttpBinding

Http/Https

Text,MTOM

Yes

NetTcpBinding

Tcp

binary

No

NetPeerTcpBinding

P2p

Binary

No

NetNamedPipeBinding

IPC

Binary

No

WSHttpBinding

Http/Https

Text,MTOM

Yes

WSFederationHttpBinding

Http/Https

Text,MTOM

Yes

WSDualHttpBinding

Http

Text,MTOM

Yes

NetMsmqBinding

MSMQ

Binary

No

MsmqIntegrationBinding

MSMQ

Binary

Yes

 

在例子中,用到的绑定是:wsHttpBinding

 

它支持Http/Https传输,且编码支持文本和MTOM

这里演示一下两种编码格式对soap对象是怎么样一种表现。

它默认的编码是文本,就是常见的那种,就一个soap,一个soap封套。而如果是MTOM呢,就会以一种soap封套加soap附件格式传输

在配置文件中可以这样设置:

第一部分,这是终结点的ABC,其中绑定要求绑定细节,即粗体部分

<endpoint address="" binding="wsHttpBinding" bindingConfiguration="BindingSelf" contract="FirstService.ICaculateService">

 

第二部分,用于配置绑定细节

<bindings>

<wsHttpBinding>

<binding name="BindingSelf" messageEncoding="Mtom">

</binding>

</wsHttpBinding>

</bindings>

 

这里有个messageEncoding,因为用的是wsHttpBinding,而它支持两种编码,所以这里只有两个枚举值:mtomtext

 

我这里提供一段MTOM消息编码流:

--uuid:55e877da-b9b1-4091-9832-f1dd79ece1d4+id=2

Content-ID: <http://tempuri.org/0>

Content-Transfer-Encoding: 8bit

Content-Type: application/xop+xml;charset=utf-8;type="application/soap+xml"

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">

省略……

</s:Envelope>

--uuid:55e877da-b9b1-4091-9832-f1dd79ece1d4+id=2--

 

这与Text编码不同。Text编码只一个封套。

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
网络协议 安全 Windows
WCF如何绑定netTcpBinding寄宿到控制台应用程序详解
新建一个WCF服务类库项目,在其中添加两个WCF服务:GameService,PlayerService
WCF如何绑定netTcpBinding寄宿到控制台应用程序详解
|
C#
C#面向服务编程技术WCF从入门到实战演练
一、WCF课程介绍 1.1、Web Service会被WCF取代吗? 对于这个问题阿笨的回答是:两者在功能特性上却是有新旧之分,但是对于特定的系统,适合自己的就是最好的。不能哪一个技术框架和行业标准作比较,任何对于二者的比较都是错误的,因为两者根不不在同一个范畴里。
1397 0
|
安全 网络协议 数据格式
WCF系统内置绑定列表与系统绑定所支持的功能
WCF系统内置绑定列表 绑定 配置元素 说明 传输协议 编码格式 BasicHttpBinding 一个绑定,适用于与符合 WS-Basic Profile的Web服务(例如基于 ASP.NET Web 服务(ASMX)的服务)进行的通信。
782 0
|
网络协议
WCF绑定的选择
版权声明:欢迎评论和转载,转载请注明来源。 https://blog.csdn.net/zy332719794/article/details/8593924 格式与编码 每种标准绑定使用的传输协议与编码格式都不相同,如表1-1 所示。
616 0
|
数据库 网络架构
我的服装DRP之即时通讯——为WCF增加UDP绑定(应用篇)
发个牢骚,博客园发博文竟然不能写副标题。这篇既为我的服装DRP系列第二篇,也给为WCF增加UDP绑定系列收个尾。原本我打算记录开发过程中遇到的一些问题和个人见解,不过写到一半发现要写的东西实在太多,有些问题甚至不好描述,又担心误导读者,就作罢了。
646 0
为WCF增加UDP绑定(实践篇)
这两天忙着系统其它功能的开发,没顾上写日志。本篇所述皆围绕为WCF增加UDP绑定(储备篇)中讲到的微软示例,该示例我已上传到网盘。 上篇说道,绑定是由若干绑定元素有序组成,为WCF增加UDP绑定其实就是为绑定增加UDP传输绑定元素,最终目的是在信道栈中生成UDP传输信道。
915 0
|
网络协议 网络架构 安全
为WCF增加UDP绑定(储备篇)
日前我开发的服装DRP需要用到即时通信方面的技术,比如当下级店铺开出零售单时上级机构能实时收到XX店铺XX时XX分卖出XX款衣服X件之类的信息,当然在上级发货时,店铺里也能收到已经发货的提醒。即时通信技术能运用到DRP系统的很多方面,若深入下去,甚至可以开发一个系统内部的通讯模块,类似于QQ。
1009 0
|
网络协议
WCF绑定类型选择
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/6070364     WCF绑定类型选择     发布日期:2010年12月10日星期五 作者:EricHu     在开发WCF程序时,如何选择一个适合的绑定对于消息传输的可靠性,传输模式是否跨进程、主机、网络,传输模式的支持、安全性、性能等方面有着重要的影响。
814 0
|
XML 安全 网络协议
WCF入门(一)——终结点,地址,绑定(1)
运行WCF服务 这里通过自宿主方式self-host来运行wcf服务。 公开终结点Endpoint,终结点由ServiceEndpoint 类来实现。它有很多的成员。其中要用到的是所说的ABC。 Address,Binding,Contract,地址,绑定,契约。
1032 0
|
网络架构
WCF入门(二)——终结点,契约(2)
Contract 契约,用于提供消息的标准,消息交换的规则。它分四类: ·服务契约 定义操作 ·数据契约 定义数据 ·异常契约 定义异常 ·消息契约 定义消息格式 (一)服务契约 服务契约,可以用接口定义,也可以直接在类上定义。
669 0