Я недавно использовал WCF Web Api и использую встроенный в него тестовый клиент WCF Web API для тестирования созданных мной веб-сервисов.
Я хочу создать прокси в коде, построенном из интерфейса, а не запускать svcutil.exe для создания прокси.
Мой веб-сервис работает нормально, однако, когда я использую fiddler для проверки отправляемого сообщения, он помещает пространство имен в сообщение xml.
Ниже приведен код, который я использую для отправки запроса.
RegisterRequest registerRequest = new RegisterRequest
{
Email = "test@test.com",
Firstname = "firstname",
Lastname = "lastname",
Password = "password"
};
var factory = new ChannelFactory<IAccountApi>(new WebHttpBinding(), "http://localhost/WebServices/api/account");
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
var proxy = factory.CreateChannel();
proxy.Register(registerRequest);
Этот запрос, приведенный ниже, генерируется через клиента, и он завершается неудачно, возвращая внутреннюю ошибку сервера 500
<RegisterRequest xmlns="http://schemas.datacontract.org/2004/07/ServiceModel.Accounts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Email>test@test.com</Email><Firstname>firstname</Firstname><Lastname>lastname</Lastname><Password>password</Password></RegisterRequest>
Используя те же заголовки, когда я отправляю с помощью тестового клиента API, следующее сообщение проходит
<RegisterRequest><Email>test@test.com</Email><Firstname>firstname</Firstname><Lastname>lastname</Lastname><Password>password</Password></RegisterRequest>
Единственное отличие состоит в том, что пространство имен было удалено.
Некоторые последние очки,
1) Если бы я смог удалить это пространство имен, запрос работал бы
2) Я не уверен, можно ли использовать ChannelFactory совместно с WCF Web Api. Причина в http://wcf.codeplex.com/releases/view/73423 гласит: «[ServiceContract] больше не требуется для определения класса Web API», однако Channel Factory требует его.
3) Все примеры, которые пока не относятся к веб-API WCF, выглядят следующим образом
HttpClient client = new HttpClient ();
Contact contact = new Contact() { Name = name };
var response = client.Post("http://localhost:9000/api/contacts/",
new ObjectContent<Contact>(
contact, JsonMediaTypeFormatter.DefaultMediaType));
Должен ли я использовать HttpClient для своих запросов вместо фабрики каналов?
С уважением,
Andrew