c# - 发布到发送 NULL 值的 WCF 服务

标签 c# iphone objective-c xml wcf

我正在尝试从 iPhone 应用程序发布到我的 WCF 服务。我将应用程序发布到服务并尝试以 XML 中的服务数据契约(Contract)的形式发送数据,如下所示:

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];

出于测试目的,我设置了我的服务以返回我发送给该服务的数据契约(Contract)。然而,当它返回时,一些值似乎是 NULL,尽管从上面的代码来看,我给了它们值。

同样奇怪的是 Name 数据成员总是有一个值,但我发送的其他 3 个返回 NULL 或根据它们在 XML 中出现的顺序使用正确的值 I发布到服务。

下面是我的服务契约(Contract)的代码:

[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 数据契约(Contract)的代码:

[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; }

}

如果您需要更多代码,请告诉我。

非常感谢任何帮助。

最佳答案

顺序在数据协定中很重要 - 默认情况下,数据成员按字母顺序排序,但您可以使用 [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>

关于c# - 发布到发送 NULL 值的 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6024264/

相关文章:

c# - 如何在 XML Comment <return> 注释中指定类型

iPhone,如何从照片库中读取一张图像作为 NSData?

iphone - 从 ^block 访问属性会导致愚蠢的行为

iphone - 推送通知 - 我们是否需要更新服务器上的 p12 以获得新证书?

objective-c - NSButton 在 NSImageView 上显示时出现渲染问题

ios - iPhone 应用程序错误预期标识符或 '('

c# - 返回匿名类型的简单方法(使使用 LINQ 的 MVC 成为可能)

c# - 在 .NET 中以换行符拆分字符串的最简单方法?

c# - 如何对忽略文章 ("the"、 "a"等的 SQLite 查询进行排序)?

ios - Cocos3d : Set CC3Scene backdrop to transparent