c#将Web服务引用作为参数传递给方法

时间:2016-03-10 08:58:43

标签: c# web-services

我为此搜索了很多但是我总是得到将参数传递给一个Web服务的结果。我希望将Web服务对象作为参数传递给方法,如果可能的话。我目前的代码如下。

    public static string CheckDaysLeft(string serial)
    {
        amazonaws.WebService1 MyService = new amazonaws.WebService1();
        return MyService.GetDaysLeft(serial).ToString();
    }

所以我的项目中有两个Web服务引用, localserver 以及上面的 amazonaws 。上面我称之为联系亚马逊网络服务的方法,并获取特定序列号的剩余时间。这工作正常。我希望能够作为参数传递给CheckDaysLeft方法,使用两个Web服务中的哪一个(localserver或amazonaws)。原因是如果一个Web服务关闭,程序将尝试与另一个Web服务通信。我可以创建两次CheckDaysLeft方法并在每种方法中使用每个Web服务引用,但这并不理想。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

如果他们没有共同的基类或接口,我可以想到两种方法来实现你想要的东西:

传递object
让您的方法采用object参数并使用is运算符来查找您所获得的内容,可能是这样的:

public void CallMethod(object service)
{
    if (service is Localservice)
        ((Localservice)service).CallMethod();
    else
        ((Amazonservice)service).CallMethod();
}

创建代理类
您还可以将每个调用封装在具有两个服务引用的代理类中,并决定使用哪个。然后,您可以依赖代理类来做正确的事情:

public class ProxyClass
{
    private Localservice _localService;
    private Amazonservice _amazonService;

    public ProxyClass(Localservice instance1, Amazonservice instance2)
    {
        _localService = instance1;
        _amazonService = instance2;
    }

    public void CallMethod()
    {
        if (shouldUseLocalService)
            _localService.CallMethod();
        else
            _amazonService.CallMethod();
    }
}

然后你可以像这样制作你的实际方法:

public void CallMethod(ProxyClass proxy)
{
    proxy.CallMethod();
}

答案 1 :(得分:0)

如果你的两个服务器都使用相同的方法(Object.GetDaysLeft(serial)),你总是可以创建一个接口,然后你可以在两个类中实现它们,比如说IMyServers。 这样,您可以按照以下方式执行某些操作:

public static string CheckDaysLeft(string serial, IMyServer Server)
{
    return Server.GetDaysLeft(serial).ToString();
}
相关问题