[英]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.