У меня есть приложение WCF Web API, которое регистрирует маршруты по следующему шаблону:
RouteTable.Routes.Add(new ServiceRoute("MyService", new WebServiceHostFactory(), typeof(MyServiceImplementation)));
Я недавно обновил до Preview 6. Я также обновил шаблон регистрации в Global.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/schema" из моего запроса, служба принимает запрос. У меня есть существующие клиенты APIкоторый будет делать вызовы новой службе с этим подарком, поэтому я должен убедиться, что эти сообщения приняты.
Я понимаю, что используемые мной WCF-расширения WebFi (метод расширения) используют разные классы подкапот, но сейчас я немного не знаю, почему один сможет десериализовать, а другой - нет.
Приветствия.