gpt4 book ai didi

c# - 仅为 WCF 服务上可用的服务契约(Contract)接口(interface)之一生成客户端

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:46 25 4
gpt4 key购买 nike

我目前正在重构一个大型 WCF 服务,该服务由多个不同客户端应用程序使用的一个服务契约接口(interface)(以下简称“SCI”)组成。我已经拆分了 SCI,以便对于每种类型的客户端应用程序,都有一个特定于其所需操作的 SCI。 SCI 的一些共享部分在基础 SCI 中定义,客户端应用程序特定的 SCI 继承。

有一个服务类实现了所有客户端特定的 SCI。共享基础 SCI 存在菱形接口(interface)继承情况的事实意味着,有时,相同的操作可通过多个 SCI 获得。当自动生成客户端时(尤其是使用异步客户端方法),生成的代码有很多难看的 <generated-type>1,2,3等等……

为了避免这种情况,我想为每个客户端应用程序添加一个服务引用,它只为与该特定应用程序相关的 SCI 生成一个客户端。由于相同的功能出现在不同的 SCI 上,这应该不会造成任何问题。

这可能吗?

在这种情况下实现模块化和代码重用的任何其他技巧也将不胜感激。

最佳答案

您要做的是创建一个服务契约接口(interface)(您可以手动执行此操作,从原始服务实现中拉取它或自动生成它然后将其复制出来)。

然后不使用服务引用,而是使用 channel 工厂绑定(bind)到您的服务(如下所示)。这是一种更好的引用 WCF 服务的方式。

您需要以下引用来执行此操作:

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

然后您可以使用以下内容:

     var binding = new WebHttpBinding();
var factory = new ChannelFactory<IMyServiceContract>(binding, new EndpointAddress("http://url:port"));
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());

var myService = factory.CreateChannel();

myService.ServiceMethod();

关于c# - 仅为 WCF 服务上可用的服务契约(Contract)接口(interface)之一生成客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8497723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com