Возможная проблема параллелизма.NET XmlSerializer?
У нас есть приложение, в котором клиент.NET потребляет веб-сервисы Java, и у нас возникла очень неприятная проблема параллелизма. Я разместил ServletFilter на стороне Java, чтобы регистрировать входящее http-сообщение мыла. И 99,9% этих запросов правильно отформатированы, однако, каждый раз, когда мыльное сообщение, отправляемое со стороны.NET, имеет неправильно сформированное объявление "xmlns" в параметре IN/OUT, которое передается в заголовке мыла.
Элемент "stateId" выглядит так:
<soap:Header>
<stateId xmlns="http://webservice.lassen.landacorp.com <http://webservice.lassen.landacorp.com/> ">
.
.
.
</stateId></soap:Header>
Правильно отформатированные мыльные сообщения выглядят так:
<soap:Header>
<stateId xmlns="http://webservice.lassen.landacorp.com">
.
.
.
</stateId></soap:Header>
Сгенерированный код.NET для этого типа выглядит следующим образом:
namespace landacorp.common.datatypes {
[Serializable]
[XmlRoot("stateId", Namespace = "http://webservice.lassen.landacorp.com", IsNullable = true)]
[DebuggerStepThrough]
[XmlType(Namespace = "http://xml.business.lib.landacorp.com")]
[GeneratedCode("LandaWsdl", "1.0.0.0")]
[DesignerCategory("code")]
public class StateIdentifier : SoapHeader {
Вот как сгенерированный класс веб-сервиса выглядит для рассматриваемого метода:
[WebServiceBinding(Name = "RunUserDefinedWindowBinding", Namespace = "http://runuserdefinedwindow.webservice.lassen.landacorp.com/")]
[DesignerCategory("code")]
[GeneratedCode("LandaWsdl", "1.0.0.0")]
[DebuggerStepThrough]
public class RunUserDefinedWindowService : SoapHttpClientProtocol {
public RunUserDefinedWindowService();
public StateIdentifier stateId { get; set; }
.
.
.
[SoapHeader("stateId", Direction = SoapHeaderDirection.InOut)]
[SoapDocumentMethod("", Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Bare)]
public retrieveRecordResponse retrieveRecord(retrieveRecord retrieveRecord1);
В настоящее время я смотрю на места, где свойство stateId может быть небезопасно установлено / указано в многопоточной среде.