【发布时间】:2014-01-06 19:27:42
【问题描述】:
我创建了一个基于 WSDL 的 WebService 代理类(在我的 Visual Studio 2010 .NET 解决方案中)。
现在我需要的是,我对远程 Web 服务的请求的soap 标头具有特定格式,想象一下具有两个或三个字段的东西不是很相关。
所以我的解决方案是,我编辑了 Visual Studio 生成的代码,并注释掉了我需要该自定义 soap 标头的方法。
接下来,因为 web 服务类被标记为部分,我在一个与生成的类同名的类中创建了安全代码(生成器不能触及)(所以它是同一个类)并在那里声明方法之前注释掉了。
我是这样声明的:
//this is the generated code file
public partial class Invoices: InvoicesWS.invoices
{
//[System.Web.Services.Protocols.SoapDocumentMethodAttribute( ...
//public RegisterInvoiceResponseType RegisterInvoice(RegisterInvoiceType ...)
//{ ... }
}
//this is the class I created else where in my project
public partial class Invoices: InvoicesWS.invoices
{
public SecureSoapHeader Security { get; set; }
[SoapHeader("Security", Direction = SoapHeaderDirection.In)]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute(
"http://someurl.pt/invoices/RegisterInvoice",
Use = System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Bare),
TraceExtension()]
public RegisterInvoiceResponseType RegisterInvoice(RegisterInvoiceType RegisterInvoiceElem)
{
object[] results =
this.Invoke("RegisterInvoice", new object[] {RegisterInvoiceElem});
return ((RegisterInvoiceResponseType)(results[0]));
}
}
所以,为了让我的代理类发送一个自定义标头,我这样做了。 但是每次我记得更新网络参考时,我都必须手动注释掉上面由 Visual Studio 工具生成的方法,以避免由于必须方法而引起的冲突 签名相同。
有没有更好的方法或最佳实践来解决这种情况?
请不要建议我使用 WCF,我知道解决方案, 但正确的是,这是一直在工作并更改它的代码 这一次是不可能的。
谢谢。
【问题讨论】:
-
如何将您的方法重命名为 ex,
RegisterInvoice2并在您的代码中使用它而不是RegisterInvoice -
感谢 L.B 的建议,但这似乎是一种解决方法,我想尽可能直截了当。还是谢谢。
标签: c# .net webservices-client