發出的操作合同,如:設計SOA WCF Web服務時的最佳做法是什麼?
[OperationContract]
void Operation(string param1, string param2, int param3);
這可以被重新設計,以:
[MessageContract]
public class OperationRequest
{
[MessageBodyMember]
public string Param1 { get; set; }
[MessageBodyMember]
public string Param2 { get; set; }
[MessageBodyMember]
public int Param3 { get; set; }
}
[MessageContract]
public class OperationResponse
{
}
[OperationContract]
OperationResponse Operation(OperationRequest request);
有一件事我喜歡的MessageContract的是,我得到多一點的明確控制的格式SOAP消息。
同樣,我可以寫幾乎相同的代碼,但使用DataContract:
我喜歡的DataContract[DataContract]
public class OperationRequest
{
[DataMember]
public string Param1 { get; set; }
[DataMember]
public string Param2 { get; set; }
[DataMember]
public int Param3 { get; set; }
}
[DataContract]
public class OperationResponse
{
}
[OperationContract]
OperationResponse Operation(OperationRequest request);
的一件事是我可以定義IsRequired,順序和名稱。
今天我期望唯一的消費者將是一個WCF客戶端。但是,我想盡可能設計合同並遵守SOA實踐。我不希望WCF指定我的SOAP,WSDL和XSD,而是希望XML定義WCF層,但使用WCF來生成這個WCF層,以便不向WCF添加任何自定義消息處理。我想遵循最常見的SOA XML約定,我認爲這可能是所有以小寫字母開頭的標籤 - 我是對的嗎?我想盡可能地容忍版本。
總是創建像這樣的請求和響應消息明智嗎?這三種格式中的哪一種促進了最佳SOA實踐?我應該更進一步並定義一個DataContract和一個MessageContract,其中MessageContract只包含DataContract?或者,如果我確實公開新類型(即不要將消息類型創建爲容器),我是否應該只使用DataContracts?
我知道一組加載的問題,但我試圖去了解它的核心,並且我不確定分離問題是否提供足夠的上下文來獲得我正在尋找的答案。
爲什麼這個回答社區wiki?這是一個很好的答案,vjrobinson應該得到他/她應得的聲望。 – 2009-08-21 15:21:02