【问题标题】:Nested class no longer nested in web reference嵌套类不再嵌套在 Web 参考中
【发布时间】:2013-10-22 06:47:39
【问题描述】:

我在 Web 服务中有一个类,其中有一个嵌套类。

namespace MyWS
{
    // web service class with web methods etc. here

    public class SomeClass
    {
        // fields, properties, stuff etc.

        public class NestedClass
        {
            // ...
        }
    }
}

当我尝试从 Web 服务中创建 Web 引用时,NestedClass 不再嵌套,并且作为引用中的独立类位于 SomeClass 之外(通过 MyWS.NestedClass 访问)。下次生成网络引用时,有什么方法可以强制它保持嵌套?也许是某种属性?

我正在使用 .NET 2.0 和 VS 2005,如果有什么不同的话。如果可能,请不要建议升级到更新的技术/环境作为解决方案。

编辑:这不是架构问题。我真的不需要将类嵌套在那里,我可以很容易地改变它,所以它更有意义。我只是想知道如果我愿意,是否可以强制它嵌套在引用中。

【问题讨论】:

  • 出于好奇,为什么要嵌套一个公共类?我原以为嵌套类的存在主要是为包含类提供一些额外的内部功能。另外,您是否尝试过将内部类修饰符更改为Private(除非您绝对需要它是公开的)?我不知道这是否会有所作为,但可能值得一试。在这种情况下,也许它必须被编译为一个单独的类..
  • @Kjartan 我根本不需要嵌套它。当你遇到一些你没有预料到的事情,然后你想知道它为什么会发生,以及是否有可能强迫你做出你期望的行为时,这更像是一种情况。我想我应该首先在问题中说明。

标签: c# web-services .net-2.0 nested-class web-reference


【解决方案1】:

当您定义这样的服务时,它首先被转换为 WSDL。然后将该 WSDL 导入客户端工具中,并用于以导入语言创建类和代码。

现在考虑一种不支持类嵌套的语言,那里应该发生什么?

服务定义仅限于语言特征的共同点。嵌套类型不是功能集的一部分。

还有其他 C# 功能您无法(有效)使用。

【讨论】:

  • 嗯,我什至从未考虑过从其他语言的角度来看它,尤其是因为我并没有真正使用那些不支持嵌套类的语言。谢谢!
  • 存在类似于“代码优先”和“WSDL 优先”的划分。 VS 仅支持代码优先,对于 WSDL 优先,您需要命令行工具。这对于 Fx2/SOAP 和 Fx4/WCF 都是如此。
【解决方案2】:

这是更多的架构问题,然后是技术问题,imo。

在您的情况下,我看到您声明了嵌套类 public。没有太多理由这样做,如果不是人为地或声明式地在这两种类型之间创建依赖关系。但这可以通过其他方式完成,避免嵌套,例如:

public class A {
}

public class Dependend {
    //The only available construstor of Dependent is that one which 
    //accepts A type
    public Dependend(A aType) {
    }
}

在这种情况下,您有 2 个不同的实体(因此更容易与它们交互),并且您还在它们之间构建了牢固的关系。

【讨论】:

  • 感谢您的回答,但这不是我感兴趣的解决方案,抱歉。我已经更新了我的问题,以便更准确地了解我在寻找什么。
  • @S_F:老实说,不要认为你能实现你正在寻找的东西。另外,重复一遍,如果您愿意,还有其他可能的解决方案可以在逻辑上或概念上实现您可能正在寻找的目标。
猜你喜欢
  • 2019-01-15
  • 2012-05-24
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多