Я пытаюсь отправить сообщение в службу WCF из приложения для iPhone. У меня есть приложение, отправляющее в сервис и пытающееся отправить данные в виде контракта на сервисные данные в XML, как показано ниже:
NSData *myPostData = [[NSString stringWithFormat:@"<AddMediaItem xmlns='http://www.example.com'><Item xmlns:a='http://www.example.com/MediaItem'><a:MediaType>iPhone</a:MediaType><a:Description>Description</a:Description><a:Name>Test</a:Name><a:ImageType>JPEG</a:ImageType></Item></AddMediaItem>"] dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *myMutablePostData = [NSMutableData dataWithData:myPostData];
[request setPostBody:myMutablePostData];
[request setRequestMethod:@"POST"];
[request addRequestHeader:@"Content-Type" value:@"application/xml"];
[request setDidFinishSelector:@selector(uploadFinished:)];
[request setDidFailSelector:@selector(uploadFailed:)];
[request setDelegate:self];
[request startAsynchronous];
В целях тестирования я настроил свой сервис на возврат контракта на данные, который я отправил в сервис. Однако, когда он возвращается, некоторые значения кажутся NULL, хотя из приведенного выше кода я даю им значения.
Что также кажется странным, так это то, что элемент данных Name
всегда имеет значение, но остальные 3, которые я отправляю, возвращают NULL или с правильными значениями, основанными на порядке их появления в XML, который я публикую в службе.
Ниже приведен код моего контракта на обслуживание:
[ServiceContract(Namespace = "http://www.example.com")]
public interface IImageDiaryService
{
[OperationContract]
[WebInvoke(UriTemplate = "AddMediaItem", Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
MediaItem AddMediaItem(MediaItem Item);
}
Ниже приведен код моего контракта с данными MediaItem:
[DataContract(Namespace = "http://www.example.com/MediaItem")]
public class MediaItem
{
[DataMember]
public Int32 Id { get; set; }
[DataMember]
public String Name { get; set; }
[DataMember]
public String Description { get; set; }
[DataMember]
public String ImageData { get; set; }
[DataMember]
public String ImageType { get; set; }
[DataMember]
public String MediaType { get; set; }
}
Дайте мне знать, если вам нужен еще какой-нибудь код.
Любая помощь очень ценится.