Dan*_*lis 1 c# xml iphone wcf objective-c
我正试图从iPhone应用程序发布到我的WCF服务.我有应用程序发布到服务并尝试以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];
Run Code Online (Sandbox Code Playgroud)
出于测试目的,我已设置我的服务以返回我发送给服务的数据协定.但是,当它返回时,一些值似乎是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);
}
Run Code Online (Sandbox Code Playgroud)
以下是我的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; }
}
Run Code Online (Sandbox Code Playgroud)
如果您需要任何进一步的代码,请告诉我.
任何帮助深表感谢.
顺序在数据协定中很重要 - 默认情况下,数据成员按字母顺序排序,但您可以使用[DataMember]的Order属性覆盖它.尝试重新排序字段,您将正确填充值
<AddMediaItem xmlns='http://www.example.com'>
<Item xmlns:a='http://www.example.com/MediaItem'>
<a:Description>Description</a:Description>
<a:ImageType>JPEG</a:ImageType>
<a:MediaType>iPhone</a:MediaType>
<a:Name>Test</a:Name>
</Item>
</AddMediaItem>
Run Code Online (Sandbox Code Playgroud)