为什么WCF有时会在生成的代理类型的末尾添加“Field”?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

基本上,我有一个带有成员X和Y的服务器端类型“Foo”。每当我使用Visual Studio的“添加服务器引用”时,我就会看到WSDL和生成的代理都向所有成员添加单词“Field”并更改第一个字母的外壳。IE,“X”和“Y”被重命名为“xField”和“yField”。任何想法为什么发生这种情况?我无法弄清楚这种模式。

详细信息 - 我有一个传统的ASMX Web服务,它暴露了“Foo”类型。我创建了一个新的WCF服务,它是旧Web服务的一个包装 - 新服务只是包装这些方法,可能会更新几个字段的值,但它公开了完全相同的方法并返回完全相同的类型。我尝试了多次重新创建引用,并且每次都会重新命名我的字段:变量“STUFF”在wsdl和proxy中显示为“sTUFFField”。变量“X”暴露为“xField”等。

有趣的是我无法弄清楚模式 - 我试图创建一个新的ASMX Web服务作为测试和包装 - 然后变量不会重命名。所以我无法弄清WCF为什么/何时重命名变量的模式。

有人知道吗?

提问于
用户回答回答于

我有同样的问题,但我能找到解决方案。

在界面中,如果添加[DataContractFormat]标签,则最终会出现“XFieldField”的情况。但是如果在接口中用[XmlSerializerFormat]替换它,它将不会更改生成的代理中的名称。

用户回答回答于

我遇到了同样的问题,sergiosp的回答让我朝着正确的方向前进。只需添加一些其他信息,希望可以帮助别人。

添加[System.ServiceModel.XmlSerializerFormatAttribute()]到界面,并重新生成客户端代码解决了我的问题。

public interface IMyService
{
    [System.ServiceModel.XmlSerializerFormatAttribute()]
    [System.ServiceModel.OperationContract]
    recordResponse GetRecord(recordRequest request);

}

扫码关注云+社区