Извините за длинный вопрос в первую очередь. Я бы предпочел задать более короткий вопрос, но это самая урезанная версия, которую я могу предоставить, чтобы я мог четко объяснить свою точку зрения.
Я пытался предоставить нашему клиенту услугу-оболочку, которая должна предоставлять в нем несколько услуг. Идея заключается в том, чтобы сократить несколько вызовов до одного вызова и вернуть один объект, в котором есть другие связанные объекты. Чтобы проиллюстрировать мою точку зрения, позвольте мне привести следующий пример:
Допустим, у нас есть следующие услуги:
- Моя Компания.Услуги.Пожертвование
- Моя Компания.Услуги.Оплата
- МояКомпания.Услуги.Частичная Оплата
Обычно клиент должен запросить службу пожертвований (с идентификатором пожертвования), чтобы получить информацию о пожертвовании, а затем, используя полученную информацию о пожертвовании, он должен запросить платежную службу, чтобы получить данные, связанные с платежом, и, если платеж выполняется несколькими небольшими платежами, используя полученную информацию о платеже. , они должны запросить службу PartialPayment, чтобы получить всю информацию о пожертвовании для конкретного донора.
Вместо того, чтобы клиент делал это, я собираюсь предоставить службу-оболочку, которая принимает donationID в качестве единственного параметра и возвращает класс, подобный этому:
[DataContract(Namespace = "http://MyCompany.Services.DonationDetail")]
public class DonationDetail
{
[DataMember]
public MyCompany.Services.Donation.Record donationRecord;
[DataMember]
public PaymentDetail paymentDetail;
}
[DataContract(Namespace = "http://MyCompany.Services.DonationDetail")]
public class PaymentDetail
{
[DataMember]
public MyCompany.Services.Payment.Record paymentRecord;
[DataMember]
public List<MyCompany.Services.PartialPayment.Record> partialPayments;
}
Таким образом, экземпляр записи DonationDetail должен возвращать всю соответствующую информацию об этом пожертвовании.
Моя проблема возникает, когда я использую DLL этих отдельных служб * в своей службе-оболочке, поскольку любой класс, который я передаю клиенту с помощью службы-оболочки, становится частью службы-оболочки, и клиент не может сразу использовать их с соответствующими типами, которые они извлекли, используя ссылки на службы без написание пользовательского метода построения для преобразования одного типа в другой, хотя это одни и те же объекты. Вместо того, чтобы ссылаться на классы в исходном пространстве имен, сервис теперь использует следующие классы, что-то вроде этого для классов, упомянутых выше:
- DonationDetail.Record (Запись о пожертвовании - я бы ожидал MyCompany.Services.Donation.Record)
- DonationDetail.Record1 (Запись платежа - я бы ожидал MyCompany.Services.Payment .Record)
- DonationDetail.Record2 (Запись PartialPayment — я бы ожидал MyCompany.Services.PartialPayment.Record)
Есть ли способ предоставить такой интерфейс без специального конструктора? Итак, если они используют пространство имен «PartialPayment» для службы WCF MyCompany.Services.PartialPayment, могут ли они сделать что-то ниже после получения DonationDetail через службу-оболочку?
PartialPayment.Record partialPayment = dDetailObj.paymentDetail.partialPayments[0];
*: Не спрашивайте меня, почему я не использую ссылки на сервисы, если это не является причиной проблемы, так как этот вариант создает для меня другие проблемы на данный момент)