Я создал две службы WCF (Shipping & PDFGenerator).Они оба вместе с моим ClientApp совместно используют сборку с именем Kyle.Common.Contracts.В этой сборке у меня есть три класса:
namespace Kyle.Common.Contracts
{
[MessageContract]
public class PDFResponse
{
[MessageHeader]
public string fileName { get; set; }
[MessageBodyMember]
public System.IO.Stream fileStream { get; set; }
}
[MessageContract]
public class PDFRequest
{
[MessageHeader]
public Enums.PDFDocumentNameEnum docType { get; set; }
[MessageHeader]
public int? pk { get; set; }
[MessageHeader]
public string[] emailAddress { get; set; }
[MessageBodyMember]
public Kyle.Common.Contracts.TrackItResult[] trackItResults { get; set; }
}
[DataContract(Name = "TrackResult", Namespace = "http://kyle")]
public class TrackResult
{
[DataMember]
public int SeqNum { get; set; }
[DataMember]
public int ShipmentID { get; set; }
[DataMember]
public string StoreNum { get; set; }
}
}
Мой PDFGenerator ServiceContract выглядит следующим образом:
namespace Kyle.WCF.PDFDocs
{
[ServiceContract(Namespace="http://kyle")]
public interface IPDFDocsService
{
[OperationContract]
PDFResponse GeneratePDF(PDFRequest request);
[OperationContract]
void GeneratePDFAsync(Kyle.Common.Contracts.Enums.PDFDocumentNameEnum docType, int? pk, string[] emailAddress);
[OperationContract]
Kyle.Common.Contracts.TrackResult[] Test();
}
}
Если я закомментирую заглушку GeneratePDF, прокси, сгенерированный VS2010, поймет, что Test возвращаетмассив Kyle.Common.Contracts.TrackResult.Однако если я оставлю GeneratePDF там, прокси-сервер откажется использовать Kyle.Common.Contracts.TrackResult и вместо этого создаст новый класс ClientApp.PDFDocServices.TrackResult и использует его в качестве возвращаемого типа Test.
Есть ли способ заставить генератор прокси использовать Kyle.Common.Contracts.TrackResult всякий раз, когда я использую MessageContract?Возможно, есть лучший метод для использования потока и имени файла в качестве возвращаемого типа?
Я просто не хочу создавать метод Copy для копирования из ClientApp.PDFDocServices.TrackResult в Kyle.Common.Contracts.TrackResult, поскольку они должны быть точно такого же класса.