服务器端和客户端WCF共享验证库可以吗?

MrC*_*aze 2 validation wcf extension-methods

问候!

我在应用程序服务器上使用WCF库,该服务器由IIS服务器(因此是客户端)引用.我想把我的验证放在一个地方,这样我就可以调用.Validate(),它返回一个错误的字符串数组(字段太短,缺少等).问题是,这些函数不会跨越WCF边界,我真的不想在WCF服务和IIS/WCF客户端中编写相同的逻辑.有没有办法使用扩展方法或类似的东西,所以双方都可以使用.Validat()方法调用相同的代码?

非常感谢任何想法!史蒂夫

mar*_*c_s 5

如果您控制线路的两端,即服务器端(服务)和客户端,那么您可以执行以下操作:

  • 将所有服务和数据合同放入共享程序集中
  • 引用来自服务器和客户端的"合同"程序集
  • 手动创建客户端代理(通过从中ClientBase<T>创建或从中创建ChannelFactory<T>) - 不要使用"添加服务引用"或svcutil.exe!
  • 将所有验证逻辑放入共享程序集中
  • 从两个项目共享验证程序集的引用

如果要使用共享验证程序集,则必须确保服务器和客户端上使用的数据类型相同 - 只有在共享服务和数据协定时才能实现.不幸的是,这需要手动创建客户端代理(这真的不是什么大问题!).

如果您使用"添加服务引用",则Visual Studio将根据其元数据检查服务,并创建一组新的客户端对象,这些对象在其字段和所有字段方面看起来相同,但它们是一个单独的,不同的类型,因此您将无法在服务器端和客户端对象上使用共享验证.