Уже три дня я пытаюсь использовать SOAP веб-сервис в c#. net. Определение WSDL содержит элементы xsd: date и xsd: time. Также обратите внимание, что он использует пространство имен компании, с которой мы интегрируемся.
Я прошел все вопросы Stackoverflow, которые отвечают на ту же проблему, и я реализовал решение, но мне интересно, почему оно не работает для меня. В SOAP UI я могу использовать веб-сервис, поэтому с сервисом проблем нет. Я попытался создать строковые атрибуты, упомянутые в ссылках ниже, в частичном классе, а также изменил сам файл Reference.cs, но безуспешно.
Формат времени WSDL игнорируется в Visual Studio
C# SAP Soap Ошибка: значение 07: 41: 39.4780076 + 03: 00 не является допустимым временем. Он не соответствует формату XML для ABAP
Что является точным эквивалентом xsd: время в c#, DateTime или TimeSpan?
Сериализация DateTime во времени без миллисекунд и gmt
Это код c# веб-службы Reference.cs после его изменения:
[System.Xml.Serialization.XmlIgnore]
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType ="date")]
public System.DateTime IDATE {
get {
return this.iDATEField;
}
set {
this.iDATEField = value;
}
}
[System.Xml.Serialization.XmlElementAttribute(ElementName = "IDATE", Form = System.Xml.Schema.XmlSchemaForm.Unqualified, DataType = "string")]
public string IDateString
{
get
{
return this.iDATEField.ToString("yyyy-MM-dd");
}
set
{
this.iDATEField = DateTime.ParseExact(value, "yyyy-MM-dd", CultureInfo.InvariantCulture);
}
}
[System.Xml.Serialization.XmlIgnore]
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType ="time")]
public System.DateTime ITIME {
get {
return this.iTIMEField;
}
set {
this.iTIMEField = value;
}
}
[System.Xml.Serialization.XmlElementAttribute(ElementName = "ITIME", Form = System.Xml.Schema.XmlSchemaForm.Unqualified, DataType = "string")]
public string ITimeString
{
get
{
return this.iTIMEField.ToString("HH:mm:ss");
}
set
{
this.iTIMEField = DateTime.ParseExact(value, "HH:mm:ss", CultureInfo.InvariantCulture);
}
}
атрибуты XML (я использую фиктивное имя, поскольку оно конфиденциально)
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.7.3056.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="urn:ABC:com:Example:nmsps")]
и здесь c#, где я добавляю входные данные для метода веб-службы (ssIDATE: net тип DateTime) Обратите внимание, что входные данные для метода веб-службы это массив объектов, здесь я добавляю только одну запись, поэтому это массив длины 1.
fdisInputRecord.IDATE = inputRecord.ssIDATE;
fdisInputRecord.ITIME = DateTime.Parse(DateTime.Now.ToString("HH:mm:ss"));
и вот исключение, которое я получаю:
Исключение: System.Web.Services.Protocols.SoapException: ошибка сервера на System.Web.Services .Protocols.SoapHttpClientProtocol.ReadResponse (SoapClientMessage сообщение, WebResponse ответ, поток responseStream, булева asyncCall) при System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke (String имяМетода, Object [] параметры) при OutSystems.NssFDISWebService.EAM_MeasuringDocument_WS.SI_MeasuringDocument_Out_SyncService.SI_MeasuringDocument_Out_Syn c (DT_MeasuringDocumentRequestRecords [] MT_MeasuringDocumentRequest) в OutSystems.NssFDISWebService.CssFDISWebService.MssSI_MeasuringDocument_Out_Syn c (RLFDISInputStructureRecordList ssFDISInput, RLFDISOutputStructureRecordList & ssFDISOutput)
1045 * Цените вашу помощь