6 c# proxy soap wsdl web-services
我创建了一个SoapExtension类来捕获特定Web服务调用的soap请求和响应.为了使这个SoapExtension生效,我必须在生成的代理客户端中为方法添加一个属性.
例如,我已将AuditSoapCapture属性添加到此方法:
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://blahblah.com/webservices/AddressSearch", RequestNamespace = "http://blahblah.com/webservices/", ResponseNamespace = "http://blahblah.com/webservices/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
[blahblah.TriadLite.Core.AuditSoapCapture]
public System.Data.DataSet AddressSearch(string HouseNumber, string StreetName, string ZipCode) {
object[] results = this.Invoke("AddressSearch", new object[] {
HouseNumber,
StreetName,
ZipCode});
return ((System.Data.DataSet)(results[0]));
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法将此属性添加到特定方法而不修改生成的客户端代理,因为它们将在重新生成时丢失.我可以在另一个部分类或接口或其他方式中执行此操作吗?
谢谢!
不幸的是,您需要修改代理代码。你提到的其他可能性是行不通的 - 部分类不会覆盖现有的功能,而且我没有办法知道让接口来做你需要的事情(更糟糕的是,甚至没有办法让代理生成器知道您打算实现一个接口)。
我过去做过的事情是,在您可以访问 Web 服务源的情况下,编写一个小应用程序,它将解析 Web 服务的 .asmx.cs 文件中的代码(作为文本)以提取所有带有 [WebMethod] 标记的方法的名称。然后,应用程序根据某些设置文件或类似文件,通过将适当的属性插入代理方法来“修复”References.cs。这很有效,因为代理中的命名约定非常整齐地映射到原始服务中的方法名称。