什么可以导致.NET服务引用中的属性在调用时变为null?

时间:2009-03-04 23:37:37

标签: .net web-services serialization

我刚买了一台笔记本电脑(溢出水)。我将我的工作代码(2天前备份)从Windows Server 2008笔记本电脑复制到运行Visual Studio 2008 SP1的Vista笔记本电脑。两者都运行.NET 3.5 SP1。

我有一个Web方法调用,它返回产品信息。

Web服务中的某些字段(在托管服务器上运行)如下:

public class Product
{
    [XmlAttribute("sku")]
    public string SKU;

    [XmlAttribute("name")]
    public string Name;

    [XmlAttribute("category")]
    public string CategoryName;

    [XmlAttribute("categoryKey")]
    public string CategoryKey;

    public List<ProductSectionInfo> Sections;

    public List<MediaItem> MediaItems;

    public string Foo = "bar";
}

public class MediaItem
{

    [XmlAttribute("type")]
    public string Type;

    [XmlAttribute("imageKey")]
    public string ImageKey;

    [XmlAttribute("path")]
    public string Path;

    [XmlAttribute("thumbnailPath")]
    public string ThumbnailPath;

    [XmlAttribute("thumbnailImageKey")]
    public string ThumbnailImageKey;

    [XmlAttribute("selectable")]
    public bool Selectable;
}

当我运行'GetProduct'网络方法时,我的C#客户端(在新笔记本电脑上)正在填充'Sections'属性,但'MediaItems'属性不是。它只是在观察窗口中显示为空。

所以我看一下Fiddler,两者都填充在XML中。两者都是列表,在我的代理中被定义为标准[]数组。

你可能已经注意到我在上面添加了一个'Foo'属性。我在服务器上执行此操作,重新编译并重新创建Web引用。我能够在客户端验证'Foo'属性确实遇到过。所以它不是'MediaItems'是大写的或类似的东西。

我非常确信这台新笔记本电脑上有一些与众不同的东西。我没有真正写过任何新内容,只做了其他地方的改动。在我发现问题之前,我甚至没有重新创建服务引用代理。我的客户端在测试服务器上运行的另一个实例正在运行相同的服务。

固定笔记本电脑明天会回来,但我真的想深究这一点。我很困惑。我以前见过各种奇怪的事情,但真的不知道这里发生了什么。我可以以某种方式调试代理吗?

2 个答案:

答案 0 :(得分:0)

我对部分邮件未正确加载所带来的大多数问题通常是代理和服务之间的差异。 通常是更改/移动的内容,甚至是xml名称空间更改/问题。

答案 1 :(得分:0)

我知道这是一个问题,只要我提出它会解决的问题 - 当然它就是。

我仍然不知道为什么。事实上,我能够添加一个'Foo'属性,重新生成代理,但它仍然无法正常工作。

  • 我添加了一个新的'MediaItems2'属性并为其分配了一个空的'MediaItem'

    MediaItems2 = new List(new MediaItem [] {new MediaItem()})

  • 我生成了一个新代理
  • 一切正常
  • 我从网络服务中删除了“MediaItems2”
  • 我生成了一个新代理
  • 它仍然有用

但仍然非常困惑。这是该项目(ASP.NET MVC)第一次在这台笔记本电脑上运行。

哦,回去工作......