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

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

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

看来,我可以在以下三个不同版本的相同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的某个地方记录的,我只是现在找不到它。但是可以查看参考源这儿...

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

热门问答

腾讯云广州一区DNS变更,需要怎么操作?

思潮澎湃轻描淡写的生活,但思潮澎湃
推荐
我也收到相关的通知了,这里分享下~ 2019年1月31日,腾讯云将对广州地区旧的基础网络DNS服务器(10.225.30.181、10.225.30.223)进行下线。在此期间,腾讯云提供最新的DNS服务器供您更新使用。 我们建议您尽快将DNS服务器配置进行更新,并且我们为您提供...... 展开详请

CMQ创建队列成功,紧接着发送消息,报队列不存在?

CreateQueue成功后,创建队列的时间为1s,您可以等待下在sendMessage

云呼叫中心只能用户自己开发吗?

腾讯云通信团队

腾讯 · 腾讯云通信团队 (已认证)

腾讯高级产品经理
推荐

目前呼叫中心只有API文档,需要用户自己开发。如果用户需要saas系统的呼叫中心可以使用智能外呼机器人:https://cloud.tencent.com/product/ccsr

ios端推流setRenderRotation无效?

西风

renzha.net · 站长 (已认证)

www.renzha.net
推荐

你有没有调整观众端表现,即通过对 LivePushConfig 中的homeOrientation设置项进行配置,它控制的是观众端看到的视频宽高比是16:9还是6:19,调整后的结果可以用播放器查看以确认是否符合预期。

腾讯云直播 CNAME 记录添加 的 值是多少???

西风

renzha.net · 站长 (已认证)

www.renzha.net
推荐
第一步:域名备案 控制台进行域名提交管理前,需对域名进行备案,详情请查看 域名备案 和 域名备案和配置常见问题 文档。 第二步:添加域名 在视频直播菜单栏内选择【域名管理】,在域名管理页面可以看到已创建域名、类型、状态、添加时间和操作。 可添加和管理的域名类型有播放域名和推流域...... 展开详请

【建议】【API】使用API创建子网的时候允许指定已有路由表?

推荐

控制台使用的是新的接口,批量创建子网,https://cloud.tencent.com/document/product/215/31960,可以指定路由表。terraform开发的时候是基于api2.0开发的,还没有这个接口,因此暂时无法使用

所属标签

扫码关注云+社区