基本上,我有一个具有成员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重命名变量的模式。
有人知道吗?
发布于 2011-09-21 06:41:18
我也有同样的问题,sergiosp的回答让我找到了正确的方向。只是添加一些额外的信息,希望对其他人有所帮助。
向界面添加[System.ServiceModel.XmlSerializerFormatAttribute()]
并重新生成客户端代码为我解决了这个问题。
public interface IMyService
{
[System.ServiceModel.XmlSerializerFormatAttribute()]
[System.ServiceModel.OperationContract]
recordResponse GetRecord(recordRequest request);
}
发布于 2010-09-02 21:56:17
我也有同样的问题,但我找到了解决方案。
在界面中,如果你添加了DataContractFormat标签,你将以"XFieldField“结尾。但是,如果您在接口中将其替换为XmlSerializerFormat,则不会更改生成的代理中的名称。
发布于 2009-07-22 12:35:51
通常,生成的代理将具有"XField“和"YField”作为内部/受保护/私有字段,并通过名为"X“和"Y”的属性公开这些值。我认为,在创建代理客户端时,您可以设置一些选项来根据自己的喜好进行调整。
更新:我似乎没有找到任何开关或选项来控制这种行为。这可能取决于哪个序列化程序(DataContractSerializer与XmlSerializer)用于创建客户端代理。
最后,这实际上或多或少只是一个编码风格的问题--从功能上讲,这不应该有什么不同。
Marc
https://stackoverflow.com/questions/1164916
复制相似问题