1
這是我的第一篇文章。 我正在構建一個安靜的wcf服務,使用post來接受XML消息(從真正的截斷的)。由於消息使用名稱空間的方式,我無法讓WCF解析XML。我無法更改XML消息的格式。 我已經嘗試了服務和datacontract上的名稱空間屬性的各種組合,但要麼得到一個解析錯誤或缺少或NULL的段。 如果我能夠改變消息,我可以通過刪除命名空間或將命名空間前綴應用於所有字段來使其工作。不幸的是,供應商不可能改變正在發送的消息的格式。wcf的命名空間問題Restful服務
有沒有辦法讓這個與發送的消息一起工作。
樣品申請
<m:MYMESSAGE xmlns:m="my.report">
<MESSAGEHEADER>
<MESSAGETYPE>GoodReport</MESSAGETYPE>
<MESSAGEDATE>20160203134445</MESSAGEDATE>
<MESSAGEACTION>UPDATE</MESSAGEACTION>
</MESSAGEHEADER>
<PATIENT>
<LASTNAME>Last</LASTNAME>
<FIRSTNAME>First</FIRSTNAME>
<MIDDLENAME>Middlename</MIDDLENAME>
</PATIENT>
</m:MYMESSAGE>
樣品不正確的響應
<MYMESSAGE xmlns="my.report" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<MESSAGEHEADER i:nil="true"/>
<PATIENT i:nil="true"/>
</MYMESSAGE>
WCF代碼
[ServiceContract]
public interface IPDF
{
[OperationContract ]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Xml,
RequestFormat = WebMessageFormat.Xml
)]
MYMESSAGE GetPdf(MYMESSAGE mymessage);
}
[DataContract(Name = "MYMESSAGE", Namespace = "my.report")]
public class MYMESSAGE
{
[DataMember (Name ="MESSAGEHEADER",Order=0) ]
public _MESSAGEHEADER MESSAGEHEADER { get; set; }
[DataMember(Name = "PATIENT", Order = 1)]
public _PATIENT PATIENT { get; set; }
}
[DataContract(Namespace = "my.report")]
public class _MESSAGEHEADER
{
[DataMember(Name = "MESSAGETYPE", Order = 0)]
public string MESSAGETYPE { get; set; }
[DataMember(Name = "MESSAGEDATE", Order = 1)]
public string MESSAGEDATE { get; set; }
}
我試過了MessageContract,但到目前爲止沒有運氣。我可以在服務合同上放置一個名稱空間,但MessageBodyMemeber似乎沒有自己的名稱空間屬性。我得到這個迴應。 < ' –
David
Is MessageContract支持RESTFUL服務?看起來更加面向SOAP。 – David