【问题标题】:.NET WSDL Generation xs:choice name the Choice Binding Enums.NET WSDL Generation xs:choice name 选择绑定枚举
【发布时间】:2011-04-19 20:06:52
【问题描述】:

我正在生成我们的 Java Web 服务 WSDL,然后在每次我进行更改时将其导入到我们的 C# 应用程序中。每次执行此操作时,xs:choice 元素都会重新生成,但通常具有不同的编号,具体取决于首先生成的编号。例如,假设当我导入 WSDL 时,它会生成 ItemChoiceType1ItemChoiceType2。下次我导入 WSDL(更改后)时,它将切换 ItemChoiceType1ItemChoiceType2,所以我必须重新编码我使用那些 ItemChoiceTypes 的地方。有没有办法为这些构造重命名或指定名称,或者让它们每次都以相同的方式生成?

谢谢

【问题讨论】:

  • 我有同样的问题,对解决方案非常感兴趣

标签: .net web-services visual-studio-2010 c#-4.0


【解决方案1】:

所以这个对象(myObject)有一个属性(myProperty),它的类型在构建时可能会改变,并且它的值是从一个枚举中分配的。使用这个属性设置器函数:

/// 从枚举中设置属性值 /// private static void propertySetter(类型 typeNeeded, object targetObject, string propName, string fieldName) { var theDesiredValue = Enum.Parse(typeNeeded, fieldName);

    Type t = targetObject.GetType();
    PropertyInfo info = t.GetProperty(propName);
    if ((info == null) || (!info.CanWrite))
        return;
    info.SetValue(targetObject, theDesiredValue, null);
    return;

}

// 用法 propertySetter(myObject.myProperty.GetType(), myObject, "myProperty", "enumValue");

【讨论】:

  • 不确定这与我的问题有什么关系,您能详细说明一下吗?
【解决方案2】:

这是 WSDL.EXE 的默认行为。因为 xs:choice 元素是未命名的序列,所以它们接收由 WSDL.EXE 生成的名称。

据我所知,.NET 端没有解决方法,如果您重新导入 WSDL,它不会被覆盖。

如果您对 Java WSDL 有一定的控制权,则可以指定 complexTypes 来包装序列并为每种类型指定一个名称。这可能会生成一个更有用的 WSDL,您可以进行试验。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多