问候!
我在应用程序服务器上使用WCF库,该服务器由IIS服务器(因此是客户端)引用。我想把我的验证放在一个地方,这样我就可以调用.Validate(),它返回一个错误的字符串数组(字段太短,缺少等)。问题是,这些函数不会跨越WCF边界,我真的不想在WCF服务和IIS / WCF客户端中编写相同的逻辑。有没有办法使用扩展方法或类似的东西,所以双方都可以使用.Validat()方法调用相同的代码?
非常感谢任何想法! 史蒂夫
答案 0 :(得分:5)
如果您控制线路的两端,即服务器端(服务)和客户端,那么您可以执行以下操作:
ClientBase<T>
派生或从ChannelFactory<T>
创建) - 不要使用“添加服务引用”或svcutil.exe!如果要使用共享验证程序集,则必须确保服务器和客户端上使用的数据类型相同 - 只有在共享服务和数据协定时才能实现。不幸的是,这需要手动创建客户端代理(这真的不是什么大问题!)。
如果您使用“添加服务引用”,则Visual Studio将根据其元数据检查服务,并创建一组新的客户端对象,其外观相同的术语他们的字段和所有字段,但它们是一个单独的,不同的类型,因此您将无法在服务器端和客户端对象上使用共享验证。
答案 1 :(得分:1)
将数据发送到要验证的服务器是否有问题?换句话说,您的服务接口实际上提供了“验证”方法并获取了数据合同,其中包含数据,验证它并返回List,其中T是某种自定义ValidationResult数据协定,其中包含有关验证警告所需的所有信息/错误。
在服务架构中,您无法信任理论上完全可以与其他公司合作的客户,为您做过适当的数据验证。您始终需要在服务层执行此操作,并将这些验证问题的通信设计回客户端。所以,如果你在服务器上做这项工作,为什么不打开那个逻辑直到客户端,以便他们可以直接使用它?当然,客户端可以(应该)仍然进行某种基本的输入验证,例如检查空值,空字符串,超出范围的值等,但核心业务逻辑检查应该运送到服务。