gpt4 book ai didi

c# - 如何在不修改生成的类的情况下将 SoapExtension 属性添加到生成的 Web 服务客户端代理?

转载 作者:太空狗 更新时间:2023-10-29 21:56:07 25 4
gpt4 key购买 nike

我创建了一个 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]));
}

我正在寻找一种将此属性添加到特定方法的方法,而无需修改生成的客户端代理,因为它们会在我们重新生成时丢失。我可以在另一个部分类或接口(interface)或其他方式中执行此操作吗?

谢谢!

最佳答案

不幸的是,您需要修改代理代码。您提到的其他可能性将不起作用 - parial 类不会覆盖现有功能,而且我不知道如何让接口(interface)执行您需要的操作(事实上什至没有办法让代理生成器知道您打算实现一个接口(interface))。

我过去做过的事情是,在您可以访问 web 服务源的情况下,编写一个小应用程序来解析 .asmx.cs 文件中的代码(作为文本) Web 服务提取所有标记有 [WebMethod] 的方法的名称。然后,应用程序根据某些设置文件或类似文件,通过将适当的属性插入代理方法来“修复” References.cs。这很有效,因为代理中的命名约定非常巧妙地映射到原始服务中的方法名称。

关于c# - 如何在不修改生成的类的情况下将 SoapExtension 属性添加到生成的 Web 服务客户端代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/640505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com