用于单个ASP.NET应用程序的WCF Web服务BLL最简单的方法

用于单个ASP.NET应用程序的WCF Web服务BLL最简单的方法,asp.net,wcf,web-services,security,data-access-layer,Asp.net,Wcf,Web Services,Security,Data Access Layer,保护WCF Web服务的最简单有效方法是什么?WCF Web服务构建为仅由单个小型ASP.NET Web应用程序使用的组合DAL/BLL 背景: 我相对来说是一个网络开发高手,尤其是在安全方面 当前的DAL作为一个库存在于web应用程序和asmx web服务中,完全是在VS2003中自制的。身份验证/令牌生成方法是通过web服务调用的,但其他所有方法都是直接从web应用程序调用的。我们的DBA担心这是不安全的,并且希望所有的数据库访问也发生在web服务中(首先我不能质疑这个问题/解决方案是否有效

保护WCF Web服务的最简单有效方法是什么?WCF Web服务构建为仅由单个小型ASP.NET Web应用程序使用的组合DAL/BLL

背景:

我相对来说是一个网络开发高手,尤其是在安全方面

当前的DAL作为一个库存在于web应用程序和asmx web服务中,完全是在VS2003中自制的。身份验证/令牌生成方法是通过web服务调用的,但其他所有方法都是直接从web应用程序调用的。我们的DBA担心这是不安全的,并且希望所有的数据库访问也发生在web服务中(首先我不能质疑这个问题/解决方案是否有效,但如果有人能详细说明为什么有效或无效,请回答)


我装备了VS2012,这是我的任务。我的研究将我引向了WCF,我已经创建了一个测试web服务和一个成功使用它的测试web应用程序。

我建议发现类型共享和数据契约共享之间的区别

但最快的途径是:

使用NetDataContractSerializer处理“跨越线路”的DotNet对象。 这是“类型共享”序列化程序。但只有当你的客户仅仅是DotNet(这似乎就是你的情况)时,它才会起作用

我会怎么做

  • 创建域库(即仅对象的DTO)
  • 让WCF iSeries。。参考那个图书馆。所有“契约”都需要接受DTO库中的标量或对象
  • 有一个实现iSeries设备的包装器“服务层”(服务器端)。这里的代码将非常“愚蠢”。只需将请求传递给真正的业务层。(这种分离的原因是,您可以在不经过WCF的情况下访问业务层逻辑(想想“单元测试”)
  • 与客户端共享您的域库(DTO对象)dll。(这取决于使用NetDataContractSerializer,又名,使用类型共享)
  • 一旦完成……您将有“原始”WCF工作。 然后,您可以通过配置应用wcf安全性

    下面是使用基于证书的安全性的一个很好的演练


    业务逻辑返回什么?数据集(强或非类型)、DTO对象(或POCO对象)、xml?还是什么?当前DAL有一个通用的webmethod,它接受OracleCommand(用于OracleParameters)并返回一个数据集。我不认为这在web服务上能很好地工作,因为序列化的数据集太大了)所以我也计划将业务逻辑移到web服务上,这样我就可以传递对象了。谢谢,一个简单的问题:我准备创建一个“域库”,但是当我发现我能够直接从Web服务引用引用类型时,有没有理由不这样做(当然除了代码重用):如果(!IsPostBack){ServiceReference1.ServiceClient client=new ServiceReference1.ServiceClient();ServiceReference1.ProcessedClaim[]声明;声明=client.GetData(123456,(DateTime?)null,(DateTime?)null,“X”);如果你想留在非泛型的1.1世界中。ProcessedClaim[]声明“支付”创建域库的费用价格。你永远不会后悔。拥有简单的DTO,DTO_集合最终会让你的生活更轻松。事实上,我喜欢泛型,web服务被编码为返回我定义的ProcessClaimList:List,但在web应用中,它将返回类型显示为ProcessedClaim[]。将集合类型设置为[DataContract]属性给了我一个错误。