Я пытаюсь использовать сторонний SOAP API от .NET. Как обычно, я создал класс прокси-сервера C# для его вызова, и все работает нормально.В чем заключается изменение атрибута класса .NET?
Затем я поговорил с продавцом и выяснил, что для переключения между арендаторами (базами данных) я должен указать другое пространство имен 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-запросы для разных потоков в одном и том же процессе.
Вопрос в нижней строке: если я изменяю атрибут, он изменен для всего процесса или только текущего потока?
спасибо Марк. Я предположил, что мне нужно попробовать другой подход, но надеялся, что есть простой способ. –