抱歉,首先问了这么长的问题。我宁愿提出一个更简短的问题,但这是我能提供的最精简的版本,我可以清楚地解释我的观点。
我一直在尝试向我们的客户提供包装服务,该服务应该在其中提供多种服务。它背后的想法是将多次调用减少到一次调用并返回一个包含其他关联对象的对象。为了说明我的观点,让我举一个例子:
假设我们有以下服务:
- 我的公司.服务.捐赠
- MyCompany.Services.Payment
- MyCompany.Services.PartialPayment
通常客户应该查询捐赠服务(带有捐赠ID)以获取捐赠信息,然后使用检索到的捐赠信息,他们应该查询支付服务以获取支付相关详细信息,如果支付是在多个小额支付中完成的,则使用检索到的支付信息,他们应该查询 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 Record - 我希望 MyCompany.Services.PartialPayment.Record)
有没有办法在没有自定义构造函数的情况下提供这样的接口?因此,如果他们为 MyCompany.Services.PartialPayment WCF 服务使用“PartialPayment”命名空间,他们可以在通过包装服务检索 DonationDetail 后执行以下操作吗?
PartialPayment.Record partialPayment = dDetailObj.paymentDetail.partialPayments[0];
*:不要问我为什么不使用服务引用,除非那是问题的原因,因为此时该选项给我带来了其他问题)