Я занимаюсь разработкой сервиса WCF.Методы, которые должен поддерживать этот сервис, определяются третьей стороной.Интерфейс, который определяет контракт на обслуживание, частично выглядит следующим образом:
[SoapHeaders]
[ServiceContract(Namespace ="abc.xyz")]
public interface IAbcSoap
{
[SoapHeader("AuthenticationHeader",
typeof(AuthenticationHeader),
Direction = SoapHeaderDirection.In)]
[OperationContract(Action = "abc.xyz/ReverseCard")]
ReverseCardResponse ReverseCard(
OriginalRequest OriginalRequest);
Классы, определяющие контракт данных, включают в себя OriginalRequest и несколько более конкретных типов, которые наследуются от OriginalRequest, например:
[DataContract]
public class OriginalRequest
{
[DataMember]
public MessageHeader MsgHeader { get; set; }
}
[DataContract]
public class OriginalLoadRequest : OriginalRequest
{
[DataMember]
public long ProductCode { get; set; }
}
У меня есть тестовая клиентская программа, созданная с использованием SvcUtil из WSDL, созданного службой.Моя проблема в том, что код, сгенерированный из WSDL, включает в себя только OriginalRequest, а не классы, подобные OriginalLoadRequest, которые наследуются от OriginalRequest, предположительно потому, что в интерфейсе нет ссылки на эти классы.Я попытался добавить перегрузку к интерфейсу следующим образом:
[OperationContract(Action = "abc.xyz/ReverseCard")]
ReverseCardResponse ReverseCard(
OriginalRequest OriginalLoadRequest);
Но это вызывает ошибку при попытке сгенерировать WSDL.Если я правильно понимаю, это потому, что у меня не может быть двух методов с одним и тем же действием.Но действие определяется третьей стороной.Я не могу это изменить.
Что я могу сделать, чтобы клиентская программа знала OriginalLoadRequest и другие классы, которые наследуются от OriginalRequest?