을 변경 한 후 계약을 역 직렬화 할 수 없습니다 나는이 다음과 같은 패턴을 사용하여 경로를 등록하는 기존 WCF 웹 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; }
}
내가 무엇입니까 문제는 그 I는 다음과 같은 이전에 허용 계약을 게시 할 때 :
<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>
나는 다음과 같은 예외가 :
나는 내가 의 xmlns = "// MYSERVICE/스키마 HTTP"를 제거하면 것을 발견했다. 나는 현재의 새로운 서비스에 대한 호출을 할 기존의 API 클라이언트를 가지고 있으므로 이러한 메시지가 받아 들여지는지 확인해야한다.서버가 요청을 처리하는 동안 오류가 발생했습니다. 서비스에 유효한 요청을 구성하기위한 서비스 도움말 페이지를 참조하십시오. 예외 메시지는 '서비스 동작'MyOperation 접촉 '입력 파라미터'연락 '그러나 타입의 값이 수신 된'HttpRequestMessage`1 '입력 귀속되는 값을 예상'입니다. '. 에 대한 자세한 내용은 서버 로그를 참조하십시오. 내 요청에서, 서비스가 요청을 수락 :
가 이해 그 WCF 웹 API 광고 향상 (확장 메서드) 나는 후드를 사용하는 서로 다른 클래스를 사용하고 있습니다; 그러나 나는 왜 사람들이 비 직렬화 할 수 있고 다른 하나는 그렇지 않을지에 관해서는 조금 무지하다.
건배.
그것을 않았다! 그래서, 난 당신이 [DataContractFormat] 그걸 얻기 위해 속성과의 계약에 태그를 수있는 (http://codebetter.com/glennblock/2011/05/15/using-datacontracts-with-wcf-web-api/) 읽었다 DataContractSerializer를 사용합니다. 그게 왜 효과가 없을지 모르는 어떤 생각? –
그들은 버전간에 많은 제동 변경 사항을 만들어 왔습니다. DataContractSerializer에 초점을 맞춘 요소를 사용하면 실제로 REST 서비스에는 적합하지 않습니다. 그들은 여전히 JSONDataContractSerializer를 사용합니다. – Maurice