โปรดชี้แจง WCF MessageContract

ฉันสับสนเล็กน้อยกับวิธีการทำงานของ MessageContract Attribute ใน WCF

เมื่อฉันใส่ MessageContract พร็อกซีจะแสดงพารามิเตอร์สองตัวแทนที่จะเป็น 1 เช่น

GetResultResponse GetOperation(GetResultRequest request)

[MessageContract]
public class GetResultRequest 
{
   [MessageHeader]
   public Header Header { get; set; }
   [MessageBodyMember]
   public List<Person> PersonList { get; set; }

}

พร็อกซีสร้างลายเซ็นวิธีนี้:

GetOperation(ref Header, List<Person> personList)

เมื่อฉันลบแอตทริบิวต์ MEssageContract: Proxy Generates right Signatures:

GetOperation(GetResultRequest request)

ใครช่วยกรุณายืนยันว่านี่เป็นพฤติกรรมที่คาดหวังหรือไม่


wcf
person Nil Pun    schedule 04.07.2011    source แหล่งที่มา


คำตอบ (2)


นั่นคือพฤติกรรมเริ่มต้น เมื่อคุณสร้างพร็อกซี มันจะไม่สร้างสัญญาข้อความตามค่าเริ่มต้น คุณสามารถเปิดใช้งานได้ใน การกำหนดค่าขั้นสูง ใน เพิ่มการอ้างอิงบริการ ( โดยทำเครื่องหมาย สร้างสัญญาข้อความเสมอ) หรือโดย /messageContract สลับใน svcutil . เมื่อคุณเปิดใช้งานแล้ว คุณจะได้รับวิธีการที่มีพารามิเตอร์สัญญาข้อความเดียวเหมือนกับที่คุณมีในบริการ

person Ladislav Mrnka    schedule 04.07.2011
comment
ฉันลองสิ่งนี้ แต่มันสร้าง blaResponse1 และ blaRequest1 สำหรับคลาสคำขอและการตอบกลับซึ่งไม่ได้ทำเครื่องหมายด้วยแอตทริบิวต์ MessageContract - person Nil Pun; 04.07.2011

เว้นแต่ว่าคุณมีข้อกำหนดเฉพาะในการทำเครื่องหมายส่วนหัวด้วยแอตทริบิวต์ MessageHeader ให้ลองเปลี่ยนแอตทริบิวต์ class เป็น Datacontract และคุณสมบัติของคุณเป็นแอตทริบิวต์ DataMember และดูว่าลักษณะการทำงานเปลี่ยนไปหรือไม่ เท่าที่ฉันรู้ เว้นแต่คุณจะใช้ซีเรียลไลเซอร์แบบกำหนดเอง คุณจะไม่สามารถกำหนดวิธีที่ svcutil จะสร้างพร็อกซีของคุณได้

person Dominik    schedule 04.07.2011