繁体   English   中英

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

[英]c# passing a web service reference as a parameter in a method

我为此进行了很多搜索,但始终可以获得将参数传递 Web服务的结果。 如果可能,我想将Web服务对象作为参数传递给方法。 我当前的代码如下。

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

因此,我在项目中有两个Web服务引用,分别是localserver和上述amazonaws 在上面,我正在调用此方法,该方法与Amazon Web服务联系并获取特定序列号的剩余日期。 一切正常。 我希望能够作为参数传递给CheckDaysLeft方法,以使用两个Web服务(localserver或amazonaws)中的哪个。 原因是如果一个Web服务关闭,该程序将尝试与另一个Web服务进行通信。 我可以创建两次CheckDaysLeft方法,并在每个方法中使用每个Web服务引用,但这并不理想。

我怎样才能做到这一点?

如果它们没有通用的基类或接口,我可以想到两种实现所需目标的方法:

传递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();
}

如果两个服务器都使用相同的方法(Object.GetDaysLeft(serial)),则可以始终创建(如果尚未使用通用的)接口,然后可以在两个类中实现该接口,例如IMyServers。 这样,您可以按照以下方式进行操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM