後反序列化的合同我有一個現有的WCF的Web API應用程序,使用下面的模式註冊路線:無法改變航線登記
RouteTable.Routes.Add(new ServiceRoute("MyService", new WebServiceHostFactory(), typeof(MyServiceImplementation)));
我最近更新預覽6.我也更新在全球的註冊模式要的.asax使用增強擴展:
routes.SetDefaultHttpConfiguration(new MyServiceConfiguration());
routes.MapServiceRoute<MyServiceImplementation>("MyService");
我也有我張貼到的請求的方法的合同。
[WebInvoke(UriTemplate = "/MyOperation", Method = "POST")]
Contact MyOperation(Contact contact);
...
[DataContract(Name = "Contact")]
public class Contact : IExtensibleDataObject
{
[StringLength(50)]
[StringNotEmpty]
[DataMember(Name = "FirstName", Order = 1)]
public string FirstName { get; set; }
[DataMember(Name = "LastName", Order = 1)]
public string LastName { get; set; }
//[StringLength(50)]
//[DataMember(Name = "Location", Order = 1)]
//public String Location { get; set; }
public ExtensionDataObject ExtensionData { get; set; }
}
我得到的問題是,當我發佈之前接受的合同,如:
<Contact xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://myservice/schema">
<FirstName>John</FirstName>
<LastName>Smith</LastName>
<Location i:nil="true" />
</Contact>
我得到以下異常:
服務器在處理請求時遇到錯誤。請參閱 服務 幫助頁面以構建對服務的有效請求。該 異常消息是「的服務操作‘MyOperation’預期 值分配到類型‘聯繫’輸入參數‘接觸’,但 接收類型的值‘HttpRequestMessage`1’。」。有關更多詳細信息,請參閱服務器日誌 。
我發現,如果我刪除的xmlns = 「HTTP://爲MyService /模式」從我的要求,服務接受請求。我現有的api客戶端會使用這個禮物來調用新服務,所以我必須確保這些消息被接受。
據我所知,我使用的WCF Web Api增強(擴展方法)在引擎蓋下使用了不同的類;但我目前有點無知,爲什麼一個人能夠反序列化,另一個卻不能。
乾杯。
這做到了!所以,我已閱讀(http://codebetter.com/glennblock/2011/05/15/using-datacontracts-with-wcf-web-api/),您可以用[DataContractFormat]屬性標記您的合同以獲取它使用DataContractSerializer。任何想法爲什麼這不起作用? – 2012-02-03 15:45:33
他們已經在版本之間進行了大量的剎車變化更改。使用專注於元素的DataContractSerializer確實對REST服務沒有意義。他們仍然使用JSONDataContractSerializer。 – Maurice 2012-02-04 07:58:37