我必须创建一个代码,我需要使用多个Web服务引用。所有服务引用本质上都是同一服务的端点,但适用于不同的数据源。所以这些引用都包含相同的功能。
是否可以构建一个动态检查引用的解决方案,并为所有引用运行相同的功能。实际上是这样的:
printf("Give a surname to delete: ");
if (scanf("%29s", name) == 1)
{
FILE *fp = fopen("file.tmp", "w");
if (!fp) perror("file.tmp"), exit(1);
scan(NULL, name, 0, fp); // print non-matching lines to tempfile
if (fclose(fp) < 0) perror("file.tmp"), exit(1);
remove("file.txt");
if (rename("file.tmp", "file.txt") != 0) perror("file.tmp");
}
我知道这有点牵强,任何帮助都会受到赞赏。
编辑(为清晰起见):这些引用是SOAP API引用,因此方法定义也可以从Web下载。但由于所有引用都属于同一服务(仅适用于不同的帐户),因此所有引用都是相同的。
答案 0 :(得分:-1)
尝试使用反射加载程序集。
public List<IServiceInterface> CreateShippingInstance(string assemblyInfo)
{
Type[] assemblyType = Type.GetTypeArray(assemblyInfo);
if (assemblyType != null)
{
List<IServiceInterface> serviceClientList = new List<IServiceInterface>();
Type[] argTypes = new Type[] { };
foreach(var item in argTypes)
{
ConstructorInfo cInfo = assemblyType.GetConstructor(argTypes);
IServiceInterface serviceClient = (IServiceInterface)cInfo.Invoke(null);
if(serviceClient!=null)
serviceClientList.Add(serviceClient);
}
return serviceClientList;
}
return null;
}
现在你的主要代码就是这样。
List<IServiceInterface> serviceClientList = CreateShippingInstance("Namespace, classname");//class full name with namespace, you can google for details
foreach(var item in serviceClientList)
{
item.DoOperation();
}
对于安全代码,您可以使用单独的项目进行服务引用。
希望这会有所帮助!