對不起,長期以來的問題擺在首位。我寧願提出一個較短的問題,但這是我可以提供的最嚴格的版本,我可以清楚地解釋我的觀點。在另一個WCF服務中使用WCF服務的DLL引用
我一直在試圖向我們的客戶提供包裝服務,它應該提供多種服務。背後的想法是減少對一次調用的多次調用,並返回其中包含其他關聯對象的單個對象。爲了說明我的觀點,讓我給下面的例子:
比方說,我們有以下服務:
- MyCompany.Services.Donation
- 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 -
- DonationDetail(捐獻記錄我所期望的MyCompany.Services.Donation.Record) .Record1(付款記錄 - 我希望MyCompany.Services.Payment .Record)
- DonationDetail.Record2(PartialPayment紀錄 - 我希望MyCompany.Services.PartialPayment.Record)
有沒有提供一種方式這樣的界面沒有自定義構造函數?因此,如果他們使用MyCompany.Services.PartialPayment WCF服務的「PartialPayment」命名空間,他們可以在通過包裝服務檢索DonationDetail後執行下面的操作嗎?
PartialPayment.Record partialPayment = dDetailObj.paymentDetail.partialPayments[0];
*:不要問我爲什麼不使用服務引用,除非這是問題的原因,因爲該選項給了我其他的問題,我在這一點上)
嗨kmp,我會回答你的回覆,但我的工作讓我推遲,因爲我想闡述一些你的建議,並在嘗試之前進行嘗試。在此期間,我想感謝你的時間。 – Ferhat 2012-04-11 15:46:57