【发布时间】:2019-03-12 12:28:56
【问题描述】:
我正在开发 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; }
}
我有一个测试客户端程序,它是使用服务生成的 WSDL 中的 SvcUtil 创建的。我的问题是,从 WSDL 生成的代码只包含 OriginalRequest,而不是像 OriginalLoadRequest 这样继承自 OriginalRequest 的类,大概是因为接口中没有对这些类的引用。我尝试像这样向界面添加重载:
[OperationContract(Action = "abc.xyz/ReverseCard")]
ReverseCardResponse ReverseCard(
OriginalRequest OriginalLoadRequest);
但这会在尝试生成 WSDL 时导致错误。如果我理解正确,这是因为我不能有两种方法具有相同的操作。但是动作是由第三方定义的。我无法改变这一点。
如何让客户端程序知道 OriginalLoadRequest 和其他继承自 OriginalRequest 的类?
【问题讨论】: