我正在尝试使用来自 .NET 的第三方 SOAP API。像往常一样,我生成了一个 C# 代理类来调用它,一切正常。
然后我与供应商交谈,发现为了在租户(数据库)之间切换,我必须指定不同的 XML 命名空间。问题是,命名空间被烘焙到代理代码中。匿名版本:
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Web.Services.WebServiceBindingAttribute(
Name="eStrangeAPI", Namespace="urn:wsTenantSpecific")]
public partial class eTimeWSService : System.Web.Services.Protocols.SoapHttpClientProtocol {
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("",
RequestNamespace="urn:wsTenantSpecific:eStrange",
ResponseNamespace="urn:wsClientSpecificNamespace:eStrange", ...]
...
public string methodCall(ref Param param) {
...
}
所以我需要wsTenantSpecific
根据当前使用的帐户更改命名空间。我可以获取类上的属性并即时修改它们......
var attr = ((WebServiceBindingAttribute[])
typeof( eTimeWSService ).GetCustomAttributes(
typeof( WebServiceBindingAttribute ), false ))[ 0 ];
attr.Namespace = "urn:wsADifferentNameSpace";
...但我担心这是线程安全的。我们可以同时连接多个帐户,在同一进程的不同线程上运行 ASP.NET 请求。
底线问题:如果我更改一个属性,它是针对整个进程还是仅针对当前线程进行更改?