.net 自动别名生成的SOAP代理

.net 自动别名生成的SOAP代理,.net,soap,wsdl,naming-conventions,svcutil.exe,.net,Soap,Wsdl,Naming Conventions,Svcutil.exe,我目前正准备在.NET项目(C#)中使用a,但是用于服务类型和操作的命名约定非常糟糕,与C#.NET项目的典型命名约定不一致 本质上,我的问题是:在我的客户机实现中,有没有一种方法可以自动为生成的SOAP web服务代理类型/方法添加别名 我希望有某种方法可以使用别名映射来执行WSDL的转换,这样生成(或重新生成)的类型就可以使用名称,比如Contact,但是映射到底层的contactObject定义 由于我不知道在生成过程中可能会执行任何转换,因此我目前正在考虑手动(或至少在T4的帮助下)编写

我目前正准备在.NET项目(C#)中使用a,但是用于服务类型和操作的命名约定非常糟糕,与C#.NET项目的典型命名约定不一致

本质上,我的问题是:在我的客户机实现中,有没有一种方法可以自动为生成的SOAP web服务代理类型/方法添加别名

我希望有某种方法可以使用别名映射来执行WSDL的转换,这样生成(或重新生成)的类型就可以使用名称,比如
Contact
,但是映射到底层的
contactObject
定义

由于我不知道在生成过程中可能会执行任何转换,因此我目前正在考虑手动(或至少在T4的帮助下)编写类的包装器,不过这似乎是不必要的间接层次;更不用说,屁股疼

我正在阅读上的文档,但没有找到任何适用的标志。

我已将此发布到您的网站,但您是对的,它更适合此网站:

我假设您通过添加“添加服务引用…”来使用此第三方服务,它会自动为Reference.cs中的每个类生成一些代码,签名可能如下所示:

[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.thirdpartyguys.net")]
public partial class qux: object, System.ComponentModel.INotifyPropertyChanged {
你希望的是它,而不是qux,它说的是qux。如果到目前为止这一切都与您的模型相似,那么您只需将qux更改为qux,但将
TypeName=“qux”
添加到
XmlTypeAttribute
,并在引用中更改对此类的所有引用。这将在SOAP中维护正确的xml模式,但让我们更改项目中的名称:

[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.thirdpartyguys.net", TypeName = "qux")]
public partial class Qux: object, System.ComponentModel.INotifyPropertyChanged {
当然,如果XmlType属性不在定义名称空间的类中,您可以添加它。它只是没有名称空间参数。我刚刚测试过它,它确实允许我使用该服务,并在我使用的任何地方用不同的名称调用对象

这对你有用吗

编辑:(向未来读者简要介绍SchemaImporterex的想法) 据我所知,当从WSDL添加服务引用时,该扩展类可以调用与默认代码生成行为的偏差。您仍然会有一些Reference.cs作为项目和服务之间的链接,但是您可以更改生成的内容。因此,如果我们希望对象总是以大写字母开头,例如,我认为这样做的想法是(未经测试):

理论上,这将写入XmlType属性并将名称更改为正确的大小写,从而在SOAP中保持正确的XML映射。从理论上讲,使用SchemaImporterExtension的优点是对服务引用的更新不会覆盖更改。此外,可以进行一般性更改,而不是对每个特定引用进行更改

欢迎成功使用SchemaImporterExtension的用户发表评论或编辑。

我已将此发布到您的网站,但您是对的,它更适合此网站:

我假设您通过添加“添加服务引用…”来使用此第三方服务,它会自动为Reference.cs中的每个类生成一些代码,签名可能如下所示:

[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.thirdpartyguys.net")]
public partial class qux: object, System.ComponentModel.INotifyPropertyChanged {
你希望的是它,而不是qux,它说的是qux。如果到目前为止这一切都与您的模型相似,那么您只需将qux更改为qux,但将
TypeName=“qux”
添加到
XmlTypeAttribute
,并在引用中更改对此类的所有引用。这将在SOAP中维护正确的xml模式,但让我们更改项目中的名称:

[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.thirdpartyguys.net", TypeName = "qux")]
public partial class Qux: object, System.ComponentModel.INotifyPropertyChanged {
当然,如果XmlType属性不在定义名称空间的类中,您可以添加它。它只是没有名称空间参数。我刚刚测试过它,它确实允许我使用该服务,并在我使用的任何地方用不同的名称调用对象

这对你有用吗

编辑:(向未来读者简要介绍SchemaImporterex的想法) 据我所知,当从WSDL添加服务引用时,该扩展类可以调用与默认代码生成行为的偏差。您仍然会有一些Reference.cs作为项目和服务之间的链接,但是您可以更改生成的内容。因此,如果我们希望对象总是以大写字母开头,例如,我认为这样做的想法是(未经测试):

理论上,这将写入XmlType属性并将名称更改为正确的大小写,从而在SOAP中保持正确的XML映射。从理论上讲,使用SchemaImporterExtension的优点是对服务引用的更新不会覆盖更改。此外,可以进行一般性更改,而不是对每个特定引用进行更改


欢迎成功使用SchemaImporterExtension的用户发表评论或编辑。

在我提出更复杂的答案之前,请告诉我答案是否有帮助。我之所以这么问,是因为SOAP服务中那些糟糕的名称似乎来自同一个源,即自动生成的DataContractFormat。您有权访问SOAP服务的程序集吗?如果可以只重写web服务接口层并使用其依赖项,则只需[XmlSerializerFormat]属性即可。@MarkBailey我无权访问服务器端应用程序代码;这完全是第三方的。糟糕的SOAP名称(我推测)很可能是第三方命名约定的结果,很可能来自于他们使用的任何平台(PHP、Java、*shrug*)的约定。如果问题只是将“字段”附加到成员,我会接受它。@MarkBailey我刚刚找到了。也许这样的东西能为我提供实现这一目标所需的定制;我要