从同一Web服务调用Web方法

C-M*_*art 5 .net c# web-services asmx

我需要为特定Web服务中公开的Web方法集合编写包装器.将这个新的包装器方法粘贴在同一个服务中是有意义的,因为它会影响相同类型的对象.

大多数这些Web方法只是在其他文件中调用静态方法的瘦方法,这很好,但是在这些静态方法调用之前它们也有一些安全逻辑.而不是在我想要包装的每个方法调用之前重新创建安全逻辑,是否可以从本地内部的同一服务中调用这些其他Web方法,或者这是不好的做法?

这是一个例子:

[WebMethod]
public int SmallMethod1(int a)
{
    //SecurityLogic
    return AnObject.StaticMethod1();
}

[WebMethod]
public int SmallMethod2(int b)
{
    //SecurityLogic
    return AnObject.StaticMethod2();
}

[WebMethod]
public int WrapperMethod(int c)
{
    return AnObject.StaticMethod1() + AnObject.StaticMethod2();
}
Run Code Online (Sandbox Code Playgroud)

Bro*_*ass 4

一般来说,您会希望尽可能干净地将 Web 服务的公共接口与实际实现分开,在您的示例中,您通过将它们封装起来来做到这一点,这AnObject允许单独对封装的方法进行单元测试(这是一个大问题,否则尤其如此)使用网络方法)。

话虽如此,从测试的角度来看,我建议宁愿这样做:

[WebMethod]
public int WrapperMethod(int c)
{
    return AnObject.WrapperMethod(c)
}
Run Code Online (Sandbox Code Playgroud)

这将允许您编写直接测试的测试WrapperMethod(封装在AnObject),而不是尝试AnObject.StaticMethod1() + AnObject.StaticMethod2()在单元测试中重新创建测试 - 这很快就会变得混乱,因为现在您在两个不同的位置具有相同的逻辑。