Why does the generated proxy code create a new class when MessageContract is in my WCF service?

I created two WCF services (submit and PDFGenerator). They both, together with my ClientApp, share an assembly called Kyle.Common.Contracts. Inside this assembly, I have three classes:

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; }
    }
}

My PDFGenerator ServiceContract looks like this:

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();
    }
}

If I comment on the GeneratePDF stub, the proxy generated by VS2010 understands that Test returns an array of Kyle.Common.Contracts.TrackResult. However, if I leave GeneratePDF there, the proxy refuses to use Kyle.Common.Contracts.TrackResult and instead creates a new ClientApp.PDFDocServices.TrackResult class and uses this as the return type of test.

Kyle.Common.Contracts.TrackResult, MessageContract? , Stream File Name ?

ClientApp.PDFDocServices.TrackResult Kyle.Common.Contracts.TrackResult, .

+2
3

, Enum "" . , DataContractSerializer XmlSerializer. , , Enum .

[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; }
}
+2

(MessageContract + enums), . , enum nullable, . , WCF XML-, null .

WCF.

/ WCF XmlSerializer .... XmlSerializer null ... nillable = "true"... , .

WCF ... , , !

+2

Visual Studio , . , Kyle.Common.Contracts, , , - .

Advanced Add Service Reference - :

alt text

,

  • ,
+1

All Articles