博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF 第二章 契约 在一个服务中实现多个契约和终结点
阅读量:6160 次
发布时间:2019-06-21

本文共 2933 字,大约阅读时间需要 9 分钟。

一个服务作为一系列终结点被定义的。每个终结点都有一个地址,绑定和契约。契约就是暴露终结点能力的。地址就是这些应用或服务从网络的哪个地址可找到,契约是关于如何访问他们的。
在终结点和契约间有一对多的关系。一个终结点可以只有一个契约,但是一个契约可以被很多终结点引用。尽管一个终结点可以仅仅确认一个契约,接口 聚合使能一个单独的契约来暴露多个接口。另外,多个有同样绑定但是不同契约的终结点可以位于同一个地址,给一个单独终结点实现所有契约的假象。
通过在一个服务中的多个终结点暴露一个契约,你可以让服务在不同绑定下都可以访问。你可以定义一个终结点使用WS-I基础协议绑定来得到最大访 问量同时使用另外一个使用TCP协议和二进制编码的终结点来实现更快的性能。通过把多个接口变成一个接口的假象,你可以通过合并在一个单一的服务访问,初 步编纂成独立的接口能力。
列表2.10 在一个终结点中暴露多个契约
 
using
System;
using
System.ServiceModel;
using
System.Threading;
namespace
EssentialWCF
{
[ServiceContract]
public
interface
IGoodStockService
{
[OperationContract]
double
GetStockPrice(
string
ticker);
}
[ServiceContract]
public
interface
IGreatStockService
{
[OperationContract]
double
GetStockPriceFast(
string
ticker);
}
[ServiceContract]
public
interface
IALLStockServices : IGoodStockService,
IGreatStockService{};
public
class
AllStockServices : IALLStockServices
{
public
double
GetStockPrice(
string
ticker)
{
Thread.Sleep(
5000
);
return
94.85
;
}
public
double
GetStockPriceFast(
string
ticker)
{
return
94.85
;
}
}
}
列表2.11一个为三个契约暴露多个终结点的配置文件。有一个为IGoodStockService契约的终结点,两个为IGreateStockService契约的终结点和一个为IAllStockServices契约的终结点。
因为有多个终结点共享一个寻址方案,每个终结点必须定义不同的地址。使用了相对地址,所以每个终结点的完全地址是服务基地址加上相对地址。
列表2.11 在一个服务中暴露多一个终结点
 
<?
xml version="1.0" encoding="utf-8"
?>
<
configuration
>
<
system.serviceModel
>
<
services
>
<
service
name
="EssentialWCF.StockServices"
behaviorConfiguration
="mexServiceBehavior"
>
<
host
>
<
baseAddresses
>
<
add
baseAddress
="http://localhost:8000/EssentialWCF"
/>
</
baseAddresses
>
</
host
>
<
endpoint
name
="GoodStockService"
binding
="basicHttpBinding"
contract
="EssentialWCF.IGoodStockService"
/>
<
endpoint
name
="BetterStockService"
address
="better"
binding
="basicHttpBinding"
contract
="EssentialWCF.IGreatStockService"
/>
<
endpoint
name
="BestStockService"
address
="best"
binding
="wsHttpBinding"
contract
="EssentialWCF.IGreatStockService"
/>
<
endpoint
name
="AllStockServices"
address
="all"
binding
="wsHttpBinding"
contract
="EssentialWCF.IAllStockServices"
/>
<
endpoint
name
="mex"
binding
="mexHttpBinding"
contract
="IMetadataExchange"
</service
>
</
services
>
</
system.serviceModel
>
</
configuration
>
因为IGreatStockService契约在多个终结点上暴露,客户端应用程序必须在为契约创建一个代理实例时引用终结点名称。如果终结点 名称没有确认,WCF将会抛出一个错误因为它无法知道使用哪个终结点。列表2.12显示了对GreatStockServiceClient代理的两次使 用:一次使用basicHttpBinding访问BetterStockService,另一次使用wsHttpBinding访问 BestStockService.
列表2.12 当多个终结点被定义使用名字确认每个终结点
 
using
(localhost.GreatStockServiceClient proxy
=
new
Client.localhost.GreatStockServiceClient(
"
BetterStockService
"
))
{
Console.WriteLine(proxy.GetStockPriceFast(
"
MSFT
"
));
}
using
(localhost.GreatStockServiceClient proxy
=
new
Client.localhost.GreatStockServiceClient(
"
BestStockService
"
))
{
Console.WriteLine(proxy.GetStockPriceFast(
"
MSFT
"
));
}

==========

转载自

作者:
出处:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 

转载于:https://www.cnblogs.com/llbofchina/archive/2011/06/27/2091372.html

你可能感兴趣的文章
jquery用法大全
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
linux后台运行程序
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
Oracle中drop user和drop user cascade的区别
查看>>