WCF服务合同接口的不同形式都可以使用吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (91)

看来,我可以在以下三个不同版本的相同WCF合同接口API之间自由切换,而不破坏客户端:

[ServiceContract]
interface IService
{
    // Either synchronous
    // [OperationContract]
    // int SomeMethod(int arg);

    // Or TAP
    [OperationContract]
    Task<int> SomeMethodAsync(int arg);

    // Or APM
    // [OperationContract(AsyncPattern = true)]
    // IAsyncResult BeginSomeMethod(int arg, AsyncCallback callback, object state);
    // int EndSomeMethod(IAsyncResult ar);
}
提问于
用户回答回答于

WCF操作可以使用同步、EAP或(如.NET 4.5)TAP。从MSDN:

只要观察到底层消息交换模式,客户端就可以为开发人员提供他们选择的任何编程模型。因此,只要观察到指定的消息模式,服务也可以以任何方式实现操作。

实际上,可以在单个契约接口中拥有所有3种模式,它们都与同一条消息相关。

在线路上,执行操作没有什么不同。WSDL(WCF从每个端点的ABC-地址、绑定和契约构建)不包含此信息。它是从操作描述产生

如果你看看OperationDescription类中使用的ContractDescription,将看到每个操作都具有以下属性:SyncMethodBeginMethodEndMethodTaskMethod在创建描述时,WCF将根据操作名称将所有方法组合到一个操作中。如果在不同模式(例如,不同参数)中具有相同名称的操作之间存在某种不匹配,WCF将抛出一个异常,详细说明错误所在。WCF自动为基于任务的方法假定(可选)“异步”后缀,并为APM设置开始/结束前缀。

从这个意义上说,客户机和服务器端是完全不相关的。从WSDL生成代理类的实用程序(svcutil),可以为任何执行模式构建代理。它甚至不必是WCF服务。

在服务器端,如果实现了多个模式,WCF将只用一个按以下优先顺序排列:任务、同步和APM。这是在MSDN的某个地方记录的,我只是现在找不到它。但是可以查看参考源这儿...

总之,只要不修改操作表示的消息,就可以安全地更改服务器实现。

热门问答

腾讯云GPU服务器不能联外网吗?

小爱同学

腾讯云 · 技术支持 (已认证)

推荐
腾讯云GPU服务器可连外网,GPU 云服务器提供和标准CVM 云服务器一致的方便快捷的管理方式。 图片.png GPU云服务器作为CVM云服务器的一类特殊实例,购买、 操作、维护等方式与CVM云服务器一致 图片.png GPU 云服务器(GPU Cloud Computin...... 展开详请

win服务器怎么给文件夹配置755权限?

推荐
下面以腾讯云win服务器(Windows Server 2016 数据中心版 64位中文版)为文件夹配置755权限为例 1.右击【属性】 图片.png 2 .选择【安全】- 【编辑】 图片.png 3. 可对当前文件进行755权限配置 图片.png 要修改某个文件的权...... 展开详请

腾讯云sdk 兼容JDK6?

推荐

如果你说的是https://cloud.tencent.com/document/sdk/Java的话,jdk最低版本是1.7,不支持1.6

android 离线推送 为什么setOfflinePushListener不回调?

嗨喽你好摩羯座
推荐
您好,使用云通信 IM SDK 的通知栏提醒,建议参考:https://cloud.tencent.com/document/product/269/9234 中的描述来操作,通知栏提醒的内容由类 TIMOfflinePushNotification 来定义,可以通过这个类对外...... 展开详请

为什么cmq的topic配置订阅者为queue,向topic发送消息无法到达queue?

是的, 向topic发送消息应该会立即投递到订阅者。您可以检查您配置的队列名称是否正确且是真实存在的队列。如还不能解决您的问题,您可以点击控制台右上角的“工单”,进行问题进一步的排查,腾讯云会有专业的售后24小时为您服务。

脏字过滤只支持 TIMTextElem 消息,对自定义消息无效,请问有接口可以主动检查吗?

学生路人
推荐
您好,脏字检查的内容包括单聊和群组消息(只检查文本消息 TIMTextElem,不支持对自定义消息 TIMCustomElem 的过滤)、群名片、群组资料(群名称、群简介、群公告)用户资料和好友关系链中 bytes 类型的数据(如昵称、好友备注和好友分组等)。目前没有这样的接口喔...... 展开详请

所属标签

扫码关注云+社区