首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么WCF有时会在生成的代理类型的末尾添加"Field“?

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

Stack Overflow用户
提问于 2009-07-22 12:30:33
回答 5查看 10.3K关注 0票数 17

基本上,我有一个具有成员X和Y的服务器端类型"Foo“。每当我使用Visual Studio的"Add Server Reference”时,我看到WSDL和生成的代理都将单词"Field“附加到所有成员,并更改第一个字母的大小写。也就是说,"X“和"Y”被重新命名为"xField“和"yField”。你知道为什么会发生这种事吗?我想不出其中的规律。

细节--我有一个遗留的ASMX web服务,它公开了一个"Foo“类型。我创建了一个新的WCF服务,它是旧web服务的包装器--新服务只是包装那些方法,可能还会更新一些字段的值,但它公开完全相同的方法并返回完全相同的类型。我已经尝试了几次重新创建引用,每次都会重命名我的字段:变量"STUFF“在wsdl和代理中公开为"sTUFFField”。变量"X“暴露为"xField",等等。

有趣的是,我搞不懂其中的模式--我试着创建一个新的ASMX web服务作为测试并包装它--变量不会被重命名。所以我找不出为什么/何时WCF重命名变量的模式。

有人知道吗?

EN

回答 5

Stack Overflow用户

发布于 2011-09-21 06:41:18

我也有同样的问题,sergiosp的回答让我找到了正确的方向。只是添加一些额外的信息,希望对其他人有所帮助。

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

代码语言:javascript
复制
public interface IMyService
{
    [System.ServiceModel.XmlSerializerFormatAttribute()]
    [System.ServiceModel.OperationContract]
    recordResponse GetRecord(recordRequest request);

}
票数 25
EN

Stack Overflow用户

发布于 2010-09-02 21:56:17

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

在界面中,如果你添加了DataContractFormat标签,你将以"XFieldField“结尾。但是,如果您在接口中将其替换为XmlSerializerFormat,则不会更改生成的代理中的名称。

票数 4
EN

Stack Overflow用户

发布于 2009-07-22 12:35:51

通常,生成的代理将具有"XField“和"YField”作为内部/受保护/私有字段,并通过名为"X“和"Y”的属性公开这些值。我认为,在创建代理客户端时,您可以设置一些选项来根据自己的喜好进行调整。

更新:我似乎没有找到任何开关或选项来控制这种行为。这可能取决于哪个序列化程序(DataContractSerializer与XmlSerializer)用于创建客户端代理。

最后,这实际上或多或少只是一个编码风格的问题--从功能上讲,这不应该有什么不同。

Marc

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1164916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档