Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从同一web服务调用web方法_C#_.net_Web Services_Asmx - Fatal编程技术网

C# 从同一web服务调用web方法

C# 从同一web服务调用web方法,c#,.net,web-services,asmx,C#,.net,Web Services,Asmx,我需要为特定web服务中公开的web方法集合编写一个包装器。将这个新包装器方法粘贴到同一个服务中是有意义的,因为它会影响相同类型的对象 这些web方法中的大多数只是瘦方法,在其他文件中调用静态方法,这很好,但是在这些静态方法调用之前,它们也有一些安全逻辑。我想在每次方法调用之前重新创建安全逻辑,而不是在本地从同一服务内部调用这些其他web方法,还是这种做法不好 下面是一个例子: [WebMethod] public int SmallMethod1(int a) { //Security

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

通常,您会希望尽可能干净地将web服务的公共接口与实际实现分离,在您的示例中,您通过将它们封装在
AnObject
中来实现这一点,这允许单独对封装的方法进行单元测试(这是一个大问题,尤其是对于web方法)

尽管如此,从测试的角度来看,我还是建议您这样做:

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

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

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