【发布时间】:2010-05-24 19:49:02
【问题描述】:
我创建了两个 WCF 服务(运输和 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 的返回类型。
有没有办法在我使用 MessageContract 时强制代理生成器使用 Kyle.Common.Contracts.TrackResult?也许有更好的方法来使用流和文件名作为返回类型?
我只是不想创建一个 Copy 方法来从 ClientApp.PDFDocServices.TrackResult 复制到 Kyle.Common.Contracts.TrackResult,因为它们应该是完全相同的类。
【问题讨论】: