Какие типы объектов DataContract следует избегать при создании службы WCF? - PullRequest
3 голосов
/ 24 февраля 2012

Я хотел бы знать все types, которых следует избегать при создании WCF DataContract.

Я бы хотел, чтобы мой Service был полностью совместим с любой Client платформой.

Это мой interface:

public interface IShopriteService
{
    [OperationContract]
    ChangePasswordResponse ChangePassword(ChangePasswordRequest changePasswordRequest);

    [OperationContract]
    GetCampaignSchedulePlacementsResponse GetCampaignSchedulePlacements(GetCampaignSchedulePlacementsRequest getCampaignSchedulePlacementsRequest);

    [OperationContract]
    ConfirmDownloadResponce ConfirmDownload(ConfirmDownloadRequest confirmDownloadRequest);

    [OperationContract]
    UploadCampaignSchedulePlacementsResponse UploadCampaignSchedulePlacements(UploadCampaignSchedulePlacementsRequest uploadCampaignSchedulePlacementsRequest);
}

[DataContract]
public class ChangePasswordRequest
{
    [DataMember]
    public Guid ServiceProviderGuid
    {
        get;
        set;
    }

    [DataMember]
    public string OldPassword
    {
        get;
        set;
    }

    [DataMember]
    public string NewPassword
    {
        get;
        set;
    }
}

[DataContract]
public class ChangePasswordResponse
{
    [DataMember]
    public string Message
    {
        get;
        set;
    }
}

[DataContract]
public class GetCampaignSchedulePlacementsRequest
{
    [DataMember]
    public Guid ServiceProviderGuid
    {
        get;
        set;
    }

    [DataMember]
    public string Password
    {
        get;
        set;
    }
}

[DataContract]
public class GetCampaignSchedulePlacementsResponse
{

    [DataMember]
    public string Message
    {
        get;
        set;
    }

    [DataMember]
    public DateTime DateOfLatestUpdate
    {
        get;
        set;
    }

    [DataMember]
    public List<CampaignSchedulePlacement> CampaignSchedulePlacementList
    {
        get;
        set;
    }
}

[DataContract]
public class ConfirmDownloadRequest
{
    [DataMember]
    public Guid ServiceProviderGuid
    {
        get;
        set;
    }

    [DataMember]
    public string Password
    {
        get;
        set;
    }

    [DataMember]
    public DateTime DateOfLatestRecordRecieved
    {
        get;
        set;
    }
}

[DataContract]
public class ConfirmDownloadResponce
{
    [DataMember]
    public string Message
    {
        get;
        set;
    }
}

[DataContract]
public class UploadCampaignSchedulePlacementsRequest
{
    [DataMember]
    public Guid ServiceProviderGuid
    {
        get;
        set;
    }

    [DataMember]
    public string Password
    {
        get;
        set;
    }

    [DataMember]
    public List<CampaignSchedulePlacement> CampaignSchedulePlacementList
    {
        get;
        set;
    }
}

[DataContract]
public class UploadCampaignSchedulePlacementsResponse
{

    [DataMember]
    public string Message
    {
        get;
        set;
    }
}

[DataContract]
public class CampaignSchedulePlacement
{
    [DataMember]
    public Guid CampaignSchedulePlacementUID
    {
        get;
        set;
    }

    [DataMember]
    public string CampaignSchedulePlacementNo
    {
        get;
        set;
    }

    [DataMember]
    public string ClientNo
    {
        get;
        set;
    }

    [DataMember]
    public string ClientName
    {
        get;
        set;
    }

    [DataMember]
    public string ClientProductNo
    {
        get;
        set;
    }

    [DataMember]
    public string ClientProductName
    {
        get;
        set;
    }

    [DataMember]
    public string ClientProductRegion
    {
        get;
        set;
    }

    [DataMember]
    public string CampaignNo
    {
        get;
        set;
    }

    [DataMember]
    public string CampaignTitle
    {
        get;
        set;
    }

    [DataMember]
    public string CampaignScheduleNo
    {
        get;
        set;
    }

    [DataMember]
    public string CampaignScheduleTitle
    {
        get;
        set;
    }

    [DataMember]
    public string SupplierName
    {
        get;
        set;
    }

    [DataMember]
    public string SupplierProductName
    {
        get;
        set;
    }

    [DataMember]
    public DateTime PlacementDate
    {
        get;
        set;
    }

    [DataMember]
    public string Size
    {
        get;
        set;
    }

    [DataMember]
    public short Columns
    {
        get;
        set;
    }

    [DataMember]
    public int Quantity
    {
        get;
        set;
    }

    [DataMember]
    public string CombinedSize
    {
        get;
        set;
    }

    [DataMember]
    public string Colour
    {
        get;
        set;
    }

    [DataMember]
    public string Position
    {
        get;
        set;
    }

    [DataMember]
    public string PositionNo
    {
        get;
        set;
    }

    [DataMember]
    public string FromTime
    {
        get;
        set;
    }

    [DataMember]
    public string ToTime
    {
        get;
        set;
    }

    [DataMember]
    public decimal GrossUnitRateAmount
    {
        get;
        set;
    }

    [DataMember]
    public decimal GrossRateAmount
    {
        get;
        set;
    }

    [DataMember]
    public decimal DiscountAmount
    {
        get;
        set;
    }

    [DataMember]
    public decimal CommissionAmount
    {
        get;
        set;
    }

    [DataMember]
    public decimal NettCostAmount
    {
        get;
        set;
    }

    [DataMember]
    public string AdvertNo
    {
        get;
        set;
    }

    [DataMember]
    public string AdvertTitle
    {
        get;
        set;
    }

    [DataMember]
    public string AdvertLanguage
    {
        get;
        set;
    }

    [DataMember]
    public string OrderNo
    {
        get;
        set;
    }

    [DataMember]
    public DateTime OrderDate
    {
        get;
        set;
    }

    [DataMember]
    public string OrderStatus
    {
        get;
        set;
    }

    [DataMember]
    public string ContractNo
    {
        get;
        set;
    }

    [DataMember]
    public bool IsCancelledInChase
    {
        get;
        set;
    }

    [DataMember]
    public string ClientInvoiceNo
    {
        get;
        set;
    }

    [DataMember]
    public DateTime ClientInvoiceDate
    {
        get;
        set;
    }

    [DataMember]
    public decimal ClientInvoiceAmount
    {
        get;
        set;
    }

    [DataMember]
    public DateTime MaterialDeadlineDate
    {
        get;
        set;
    }

    [DataMember]
    public string ExtraInfo
    {
        get;
        set;
    }

    [DataMember]
    public string ChaseStatus
    {
        get;
        set;
    }

    [DataMember]
    public string ExternalStatus
    {
        get;
        set;
    }

    [DataMember]
    public DateTime ChaseModifiedDate
    {
        get;
        set;
    }

    [DataMember]
    public DateTime ShopriteModifiedDate
    {
        get;
        set;
    }
}

Будет ли мой сервис совместим со всеми платформами?

Ответы [ 2 ]

4 голосов
/ 24 февраля 2012

Тип должен быть помечен как SerializableAttribute, DataContractAttribute или XML Serializable. Пока тип поддерживает это, у вас все будет хорошо. WCF сообщит вам, если не сможет. Ваш контракт выглядит хорошо, так как он использует только примитивные типы, которые все покрыты, и сложные типы, которые все являются DataContracts.

Вот подробная статья о поддерживаемых типах .

1 голос
/ 24 февраля 2012

Возможно, вы захотите сделать службу WCF RESTful.Я думаю, что это не облегчит использование сервиса не-WCF.Это: http://www.amazon.com/RESTful-NET-ebook/dp/B0028N4W74/ref=sr_1_3?ie=UTF8&qid=1330091833&sr=8-3 может быть хорошим чтением.

...