【问题标题】:Calling web methods from the same web service从同一个 Web 服务调用 Web 方法
【发布时间】:2011-01-25 19:04:15
【问题描述】:

我需要为特定 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();
}

【问题讨论】:

    标签: c# .net web-services asmx


    【解决方案1】:

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

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

    [WebMethod]
    public int WrapperMethod(int c)
    {
        return AnObject.WrapperMethod(c)
    }
    

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

    【讨论】:

      【解决方案2】:

      一点也不。封装该逻辑是一个非常好的主意。你可以有一个AnObject.WrapperStaticMethod()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-31
        • 2013-03-27
        • 2011-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多