C# 选择特定WCF客户端的运行时决策

C# 选择特定WCF客户端的运行时决策,c#,performance,asp.net-mvc-3,wcf,wcf-client,C#,Performance,Asp.net Mvc 3,Wcf,Wcf Client,在我当前的项目中,我有这种情况。尽我所能去解释。 如果你有任何问题,请告诉我 public bool CancelService(int serviceId, int userID) { var serviceResponse = ServiceClient.CancelService(serviceId, userID); } //This Service call is throwing casting issues private ICont

在我当前的项目中,我有这种情况。尽我所能去解释。 如果你有任何问题,请告诉我

 public bool CancelService(int serviceId, int userID)
    {
        var serviceResponse = ServiceClient.CancelService(serviceId, userID);
    }


//This Service call is throwing casting issues 
    private IContractsService ServiceClient
    {
        get
        {
            if (ContractType == CviValues.ContractTypeIDH)
            {
                return (Presentation.CommonService.IContractsService)IDHServiceClient;
            }
            else if (ContractType == CviValues.ContractTypeIpa)
            {
                return (Presentation.CommonService.IContractsService)IPAServiceClient;
            }
            else
            {
                return (Presentation.CommonService.IContractsService)CommonServiceClient;
            }
        }
    }

    private Presentation.IDHService.ContractsServiceClient _iDHServiceClient;
    private Presentation.IDHService.ContractsServiceClient IDHServiceClient
    {
        get
        {
            if (_iDHServiceClient == null)
            {
                _iDHServiceClient = new Presentation.IDHService.ContractsServiceClient(
                    new BasicHttpBinding(BasicHttpSecurityMode.None) { MaxReceivedMessageSize = Int32.MaxValue, OpenTimeout = new TimeSpan(0, 2, 0), ReceiveTimeout = new TimeSpan(0, 10, 0), SendTimeout = new TimeSpan(0, 2, 0) },
                    new EndpointAddress(ValueUtilities.IDHContractsServiceEndpointUrl));
            }
            return _iDHServiceClient;
        }
    }

    private Presentation.CommonService.ContractsServiceClient _commonServiceClient;
    private Presentation.CommonService.ContractsServiceClient CommonServiceClient
    {
        get
        {
            if (_commonServiceClient == null)
            {
                _commonServiceClient = new Presentation.CommonService.ContractsServiceClient(
                    new BasicHttpBinding(BasicHttpSecurityMode.None) { MaxReceivedMessageSize = Int32.MaxValue, OpenTimeout = new TimeSpan(0, 2, 0), ReceiveTimeout = new TimeSpan(0, 10, 0), SendTimeout = new TimeSpan(0, 2, 0) },
                    new EndpointAddress(ValueUtilities.CommonContractsServiceEndpointUrl));
            }
            return _commonServiceClient;
        }
    }

    private Presentation.IPAService.ContractsServiceClient _iPAServiceClient;
    private Presentation.IPAService.ContractsServiceClient IPAServiceClient
    {
        get
        {
            if (_iPAServiceClient == null)
            {
                _iPAServiceClient = new Presentation.IPAService.ContractsServiceClient(
                    new BasicHttpBinding(BasicHttpSecurityMode.None) { MaxReceivedMessageSize = Int32.MaxValue, OpenTimeout = new TimeSpan(0, 2, 0), ReceiveTimeout = new TimeSpan(0, 10, 0), SendTimeout = new TimeSpan(0, 2, 0) },
                    new EndpointAddress(ValueUtilities.IPAContractsServiceEndpointUrl));
            }
            return _iPAServiceClient;
        }
    }
注意事项:

  • IDHServiceClient、CommonServiceClient和IPAServiceClient都在各自的svc文件中实现icontractservice,因此所有客户端都具有相同的公开方法。但名称空间不同

  • CancelService等方法分散在整个项目中,因此需要更改ServiceClient属性以返回正确的客户端

  • 问题==>需要更改ServiceClient属性以返回正确的客户端

    好处==>我不必更改代码ServiceClient.CancelService和此类调用(这些调用都在代码中)


    我如何做到这一点?

    有人知道解决方案吗?与其存储
    ConType
    ,为什么不存储实际的客户端?@JohnSaunders我修改了我的问题,我想知道的是如何在ServiceClient属性中进行转换?