gpt4 book ai didi

wcf - 如何将.NET代码库实现为服务层-在多个应用程序之间共享相同的BL/CRUD

转载 作者:行者123 更新时间:2023-12-04 20:38:14 25 4
gpt4 key购买 nike

设置:我正在为我的部门开发一个Intranet工具集,其主要目的是集中管理数据质量和可访问性,以及自动化和扩展部分流程。

问题:我目前在CLR程序集中有我的业务逻辑,该逻辑在我的SQL Server上可用于直接在SQL Server上直接运行自动ETL的其他CLR程序集。我还在开发一个Intranet站点,该站点也需要该业务逻辑程序集中的代码信息,但是在部署和代码维护方面,对CLR程序集代码的引用一直没有达到最佳效果。另外,另一个部门也表达了对将代码库和数据用于自己的Intranet站点的兴趣。

问题:我已经阅读了很多有关该主题的问答(1234,...),但我发现它涵盖面很广,所以我会尝试针对更具体的情况提出问题(即单个BL和数据访问代码库)


WCF服务是我想要的解决方案吗?我所有潜在的服务客户端都在同一台服务器上运行,在CLR程序集和网站项目中是否有另一种引用相同代码库的方法?我不需要对不同平台(例如Java)的支持-一切都是.NET(对于内部程序来说是这样!)-WCF是否会过时?
WCF服务中的代码可以像类库一样使用,还是我需要编程一种新方法来访问该服务中的类/方法?
将开发,测试和生产实例分开?


客户端访问时可以更新WCF服务吗?还是需要安排维护时段?更新服务时,是否还需要以某种方式更新客户端?
是否可以根据StageConfig = dev,test或prod来动态设置服务引用,就像当前正在动态设置数据库连接字符串一样?

我的CLR程序集是为.Net 3.5编写的,但是.NET 4.0的网站会带来问题吗?
我需要知道哪些最低限度的.NET服务体系结构编程集?随着时间的推移,我将学习更多有关WCF的知识,但我需要评估架构方面的工作,并权衡完成工作(功能请求)的情况。 MS tutorial能给我所需的技能吗?


我感谢仅回答单个问题的答案,如果您觉得自己有所了解,我会+1一切有助于我接近完整答案的内容。

最佳答案

好的,因此您想使代码在整个企业范围内。当您要执行此操作时,有两个基本问题要讨论,因此我将以这种方式来构造答案:


您必须了解WCF的全部含义。
您必须正确管理依赖项。




WCF是关于什么的

WCF是执行RPC / RMI(远程过程调用/远程方法调用)的一种方式,这意味着某些客户端代码可以调用通过网络位于其他位置的代码。

可调用的WCF服务由ABC三元组确定:


服务规范被实现为具有“ ServiceContract”属性的.NET接口。这是合同(“ C”)
服务的“位置”由一对确定:地址(“ A”)和绑定(“ B”)。绑定确定用于客户端和服务器之间的通信的协议套件(NetPipe,TCP,HTTP等)。地址是遵循绑定所确定的方案的URI(“ net.pipe”,“ net.tcp”,“ http”,...)


当客户端代码在具有特定绑定和特定协定(必须与特定地址处的服务器和特定绑定所传递的内容相匹配)的特定地址处调用WCF服务时,WCF会生成实现以下接口的代理对象:合约。

提供服务的程序是任何.NET可执行文件。它必须生成一个或多个WCF主机,这些主机将注册实现服务协定的对象或类,并将每个传递的服务与特定的地址和绑定相关联。 (可能很多)

可以通过app .config文件进行配置,在该文件中,您将指定ABC三胞胎,并将这些三胞胎与您将在应用程序中使用的名称关联起来。您也可以以编程方式进行操作,这非常容易。

WCF无法解决部署应用程序或地址和绑定配置的问题。它只是解决了让两个可执行文件与强类型对象(通过特定接口)相互通信的问题。共享服务配置由您决定。您可以在Windows共享上使用共享的.config文件,甚至可以设置LDAP服务器来提供查找服务所需的所有数据(即A和B)。



正确管理依赖项

在您的方案中,有三个参与者想要使用WCF基础结构:


您的SQLCLR程序集将成为客户端。
Intranet站点,它将是另一个客户端。
服务主机,将是服务器。


程序集的最小最小数量为4。每个上述行为者一个,而一个指定合同的契约,所有三个行为者都将使用该合同。它应包含以下内容:


指定合同的接口。
接口需要的所有类型,这些类型当然会通过网络发送,因此必须可序列化。


里面应该没有其他东西了,否则将成为维护的噩梦。



回答你的问题

我希望我的答案是明确的。让我们总结一下您的问题的答案。


WCF服务是我想要的解决方案吗?我所有潜在的服务客户
在同一台服务器上运行,是否有另一种方式可以引用
在CLR汇编程序和网站项目中使用相同的代码库?我不需要
支持不同的平台(例如Java)-一切都是.NET(适用于
内部程序!)-WCF会大材小用吗?


一切都太过分了。 WCF易于使用,并且缩放比例很好。


可以像类库一样使用WCF服务中的代码,还是我需要
编程一种从服务访问类/方法的新方法?


在现有代码上设置WCF仅需要实现一个附加类,并且某些代码创建将为上述类提供服务的主机。

调用WCF服务需要创建一个Channel,这是一个实现接口的.NET(代理)对象。

因此,基本上,您的业务代码保持不变。


将开发,测试和生产实例分开?


WCF对此不负责。不同的环境,不同的服务地址。您必须自己照顾这一点。


客户端访问时可以更新WCF服务吗?还是需要安排维护时段?


这取决于您的维护策略。终止服务过程并启动新版本是基本的升级机制。


更新服务时,是否还需要以某种方式更新客户端?


如果像我在上一节中所概述的那样正确地管理依赖关系,则仅在服务规范(接口)发生更改时才需要更新客户端。


是否可以根据StageConfig = dev,test或prod来动态设置服务引用,就像当前正在动态设置数据库连接字符串一样?


您必须通过以编程方式为服务设置地址和绑定来进行管理。


我的CLR程序集是为.Net 3.5编写的,但是.NET 4.0的网站会带来问题吗?


如果像我在上一节中所概述的那样正确地管理依赖关系,则唯一的约束将是“合同”程序集所需的最低CLR版本。


我需要知道哪些最低限度的.NET服务体系结构编程集?随着时间的推移,我将学习更多有关WCF的知识,但我需要评估架构方面的工作,并权衡完成工作(功能请求)的情况。 MS教程能为我提供所需的技能吗?


您将需要这些练习的结果:


制作两个可执行文件(客户端和服务器),它们将进行通信
通过位于单独DLL中的WCF合同。配置
应该位于app .config文件中。
制作两个可执行文件(客户端和服务器),它们将进行通信
通过WCF合同
位于单独的DLL中。配置应通过编程确定。
尝试将可序列化的类作为参数发送给您的服务。
尝试发送可序列化的类作为服务的返回值。


之后,您需要考虑共享服务地址和绑定的最佳/最便宜方法。

希望能帮助到你。

关于wcf - 如何将.NET代码库实现为服务层-在多个应用程序之间共享相同的BL/CRUD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13310918/

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