Да, вы можете это сделать. Мы называем это маршаллером данных, но в этом примере я назову его консолидатором.
Вы заметите, что сгенерированный WSDL класс является частичным, мы создаем файл (имя веб-ссылки) .cs и имеем что-то вроде:
Ниже приведены файлы, которые вы создаете, а не файлы, сгенерированные WSDL
WebReference1.cs
public partial class WebReferenceName1 : System.Web.Services.Protocols.SoapHttpClientProtocol
{
// take the methodname and append Local to the end
public Consolidated.ReturnType MethodName1Local(params)
{
// redirect the return value of the call to the consolidation method and return the new value
return Consolidation.Convert(this.MethodName1(params);
}
}
затем второй веб-сервис
WebReference2.cs
public partial class WebReferenceName2 : System.Web.Services.Protocols.SoapHttpClientProtocol
{
// take the methodname and append Local to the end
public Consolidated.ReturnType MethodName2Local(params)
{
// redirect the return value of the call to the consolidation method and return the new value
return Consolidation.Convert(this.MethodName2(params);
}
}
и теперь класс, который конвертирует из двух типов
Consolidator.cs
public class Consolidation
{
// Input from Web Reference #1
public static Consolidated.ReturnType Convert(WebReferenceName1.ReturnType valuetoConvert)
{
// Convert from valuetoConvert to Consolidated.ReturnType
convertedValue = (conversion of valuetoConvert to Consolidated.ReturnType);
return convertedValue;
}
// Input from Web Reference #2
public static Consolidated.ReturnType Convert(WebReferenceName2.ReturnType valuetoConvert)
{
// Convert from valuetoConvert to Consolidated.ReturnType
convertedValue = (conversion of valuetoConvert to Consolidated.ReturnType);
return convertedValue;
}
}
По сути, вы добавляете методы в веб-ссылку, вызываете методы {WebMethod} Local (), и они направляются через Consolidator и преобразуют простой сгенерированный WSDL-класс в то, что вы действительно можете использовать.
Consolidated.ReturnType - это то, что вы определяете в своем локальном проекте, это локальная версия типа данных, сгенерированная WSDL по веб-ссылке. Обычно «преобразование» - это просто клонирование / свойство путем копирования свойства из одного типа в другой.