设置:我正在为我的部门开发一个内部网工具集,其主要目的是集中管理数据质量和可访问性,同时还要自动化和扩展某些部分流程。
问题:我目前在CLR程序集中有我的业务逻辑,在我的SQL-Server上可以找到直接在SQL-Server上运行自动ETL的其他CLR程序集。我也在开发一个内部网站点,该站点还需要该业务逻辑程序集中的代码信息,但是在部署和代码维护方面,引用CLR程序集代码一直处于次优状态。另一个部门也表示有兴趣将代码库和数据用于他们自己的内部网站。
问题: 我读了很多问答(1,2,3,{{3关于这个主题的问题,但是我发现它非常有用,所以我会尝试提出更具体案例的问题(即单个BL和数据访问代码库) < / p>
我只欣赏单个问题的答案,如果你觉得自己知道某事,我会+1帮助我接近一个完整的答案。
答案 0 :(得分:2)
好的,所以你想在整个企业范围内制作你的代码。当你想要这样做时,有两个基本问题需要讨论,所以我会以这种方式构建答案:
WCF的内容
WCF是一种执行RPC / RMI(远程过程调用/远程方法调用)的方法,这意味着某些客户端代码可以通过网络调用位于其他位置的代码。
可调用的WCF服务由ABC三元组决定:
当客户端代码在特定地址调用WCF服务时,使用特定的Binding和特定的Contract(必须与特定地址和特定Binding正在传递的服务器匹配),WCF生成一个代理对象实现合同的界面。
提供服务的程序是任何.NET可执行文件。它必须生成一个或多个WCF主机,这些主机将注册实现服务协定的对象或类,并将每个传递的服务分配给特定的地址和绑定。 (可能很多)
配置可以通过app .config文件进行,您将在其中指定ABC三元组,并使用您将在应用程序中使用的名称来指定这些三元组。您也可以通过编程方式进行,这非常简单。
WCF无法解决部署应用程序或地址和绑定配置的问题。它只解决了让两个可执行文件与强类型对象(通过特定接口)相互通信的问题。共享服务配置取决于您。您可以在Windows共享上使用共享的.config文件,甚至可以设置一个LDAP服务器来提供查找服务所需的所有数据(即A和B)。
正确管理您的依赖关系
在您的方案中,有三个参与者想要使用您的WCF基础结构:
最小数量的集会将是4.每个上述演员一个,一个指定合同,将由所有三个演员使用。它应包含以下内容:
它应该没有更多,否则,它将成为维护的噩梦。
回答您的问题
我希望我的回答很清楚。让我们总结一下你问题的答案。
WCF服务是我想要的解决方案吗?我所有潜在的服务客户 在同一台服务器上运行,有没有其他方法可以参考 在CLR程序集和网站项目中都有相同的代码库?我不需要 支持不同的平台(例如Java) - 一切都是.NET(yay for 内部程序!) - 是WCF矫枉过正吗?
一切都是矫枉过正的。 WCF非常易于使用,并且可以很好地缩小。
来自WCF服务的代码可以像类库一样使用,还是我需要 编写一种从服务访问类/方法的新方法?
在现有代码上设置WCF只需要实现一个额外的类,并且一些代码创建将为上述类提供服务的主机。
调用WCF服务需要创建一个Channel,它是实现该接口的.NET(代理)对象。
基本上,您的业务代码仍保持相同状态。
开发,测试和生产实例的分离?
WCF没有处理这个问题。不同的环境,不同的服务地址。你必须自己照顾这个。
客户端访问WCF服务时是否可以更新,或者我是否需要安排维护时段?
这取决于您的维护政策。杀死服务进程并启动新版本是基本的升级机制。
当我更新服务时,是否还需要以某种方式更新客户端?
如果您像上一节中描述的那样正确管理依赖项,则只有在服务规范(接口)发生更改时才需要更新客户端。
我可以动态设置服务引用,就像我当前动态设置数据库连接字符串一样,具体取决于StageConfig = dev,test还是prod?
您必须通过以编程方式为服务设置地址和绑定来管理它。
我的CLR程序集是为.Net 3.5编写的,但是.NET 4.0的网站会出现问题吗?
如果你像我在上一节中描述的那样正确地管理你的依赖关系,那么唯一的约束就是&#34;合同&#34;所需的最小CLR版本。组装
要完成此任务,我需要知道哪些最小的.NET服务架构编程?我会随着时间的推移更多地了解WCF,但我需要评估架构工作并权衡它完成任务(功能请求)。 MS教程是否为我提供了所需的技能?
您需要这些练习的结果:
在此之后,您需要考虑分享服务的地址和绑定的最佳/最便宜的方式。
希望它有所帮助。