我想从iPhone应用程序发布到我的WCF服务。我有应用程序发布到服务,并试图在服务合同数据的形式发送数据以XML象下面这样:发布到WCF服务发送空值
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; }
}
做让我知道如果你需要任何进一步的代码。
任何帮助,非常感谢。
您是否尝试过更改MediaItem不使用自动属性(例如,将属性存储值设置并获取到本地变量)。 – Oppositional 2011-05-16 22:47:37
你可以设置一个常规的胜利形式或控制台应用程序,并尝试一下。你会得到什么结果?什么是通过电线发送的数据,使用提琴手检查出来。有可能你的反序列化不能正常工作。也许命名空间问题或XML问题。 – 2011-05-16 22:56:30
你在打什么网址?应该是http://domain.com/AddMediaItem我认为你的XML是错误的,因为你试图传递方法名称,就好像它是一个SOAP消息。这不会反序列化成MediaItem类型。为了验证这一点,在AddMediaItem方法 – 2011-05-16 22:57:41