为多个wsdl版本的第三方集成创建c#库的策略

本文关键字:创建 策略 集成 第三方 wsdl 版本 | 更新日期: 2023-09-27 18:18:24

我们需要将第三方SOAP api与我们的系统集成。由于我们是SaaS解决方案提供商,我们需要支持所有版本的第三方。我们的配置是客户A的版本是1.8,客户B的版本是2.0。(新版本可能需要几个月的时间。)

我正在寻找的是创建一个可以与所有版本一起工作的库的一般策略。

作为一种解决方案,我认为在单个c#库中创建多个命名空间版本。

  1. TP1.DLL
    • 命名空间- TP1_v1.8
      • Entity1 (Proxy class)
      • Entity2 (Proxy class)
    • 命名空间- TP2_v2.0
      • Entity1 (Proxy class)
      • Entity2 (Proxy class)

我想包装类的所有实体,无论版本。所以我将调用包装器类,它将用所需的版本初始化对象。

我该怎么做呢?这是处理这种情况的正确方法吗?

如果需要进一步的信息,请告诉我!

谢谢!

Ankur Kalavadia

为多个wsdl版本的第三方集成创建c#库的策略

您可以使用以下解决方案来帮助您实现您的问题。

->首先创建一个公共接口,它可以用于所有相同类型的公共标识符

->按版本名分隔命名空间

 DefaultNameSpace : ABC.XYZ
 Version          : 1.6.2
Then make the namespace patterns as
e.g. ABC.XYZ.V162  (Replcing . and set prefix as per classname norms (always start with Alphabet ) )
Create Class under above namespace with implementing interface

->为所有版本创建相同的类名(例如class1, class2在版本v1, v2中常见,但实现不同)

->创建下面的常用函数生成相关对象

    public static iTestInterface GetEntity(string className)
    {
        string versionPrefix = "v_";
        string strVersion =  1.6.2; 
        string dllPath =System.Web.HttpRuntime.BinDirectory; 
        string dllName = "dllName.dll";
        string Version = versionPrefix +  
        string strclassNameWithFullPath = dllPath + Version.Replace(".", "") + "." + className; 
        try
        {
            string strAssemblyWithPath = string.Concat(dllPath, dllName);
            if (!System.IO.File.Exists(strAssemblyWithPath))
            {
                return null;
            }
            System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFile(strAssemblyWithPath);
            Type t = assembly.GetType(strclassNameWithFullPath);
            object obj = Activator.CreateInstance(t);
            return (iTestInterface)obj;
        }
        catch (Exception exc)
        {
            //string errStr = string.Format("Error occured while late assembly binding. dllPath = {0}, dllName = {1}, className = {2}.", dllPath, dllName, className);
            return null;
        }
    }

-->调用函数如下

 iTestInterface obj = GetEntity(classnameString);

->调用相关的对象方法。以上调用对于所有相关类都是通用的。

谢谢,问候Shailesh Chopra