【发布时间】:2016-06-08 23:18:07
【问题描述】:
我已将第三方WSDL(通过服务参考)导入到我的控制台应用程序项目中,以便通过 Web 服务发送和接收数据。为了使其正常运行,我必须向与 Web 服务关联的Reference.cs 文件添加一些代码。虽然这可行,但如果对 WSDL 进行了更新,并且我重新导入/生成该服务引用,那么该变通方法代码将消失。
为了解决这个问题,我已将必要的代码更改保存到项目中保存的外部文本文件中。
我很好奇是否有人知道我可以将这些更改写入他们自己的单独类中,在服务引用之外,但仍然被服务引用引用,因此使用“正确”代码需要从 Web 服务发送/接收。
我有两个类(未包含在生成的代码中),在将它们分成自己的 .cs 文件并引用服务参考使用的 namespace 后,我可以在生成的代码中引用它们。
如果可能的话,我想做的是:
总体目标:
将自定义代码添加到通过导入第三方 WSDL 作为服务引用生成的代码中,这样当第三方更新 WSDL 时,另一个开发人员会不必一定记得深入服务参考的
Reference.cs 文件,并替换/添加特定代码。
为了实现这个目标,我需要能够:
- 替换生成的现有属性和关联字段
partial class,带有自定义版本(请参阅下面的代码段 #1)。 - 用自定义版本的类替换现有生成的
partial class,具有不同的属性定义和略有不同的属性/字段定义。
片段 #1
替换以下内容:
private byte[] bulkExchangeFileField;
[System.Xml.Serialization.XmlElementAttribute(Namespace = "urn:us:gov:treasury:irs:common", DataType = "base64Binary", Order = 0)]
public byte[] BulkExchangeFile
{
get { return this.bulkExchangeFileField; }
set
{
this.bulkExchangeFileField = value;
this.RaisePropertyChanged("BulkExchangeFile");
}
}
使用此版本的属性/字段,一旦我更改了生成的代码:
private BulkExchangeFileType bulkExchangeFileField;
[System.Xml.Serialization.XmlElementAttribute(Namespace = "urn:us:gov:treasury:irs:common", Order = 0)]
public BulkExchangeFileType BulkExchangeFile
{
get { return this.bulkExchangeFileField; }
set
{
this.bulkExchangeFileField = value;
this.RaisePropertyChanged("BulkExchangeFile");
}
}
【问题讨论】:
标签: c# .net web-services