Почему мой веб-сервис WCF представляет этот объект в другом пространстве имен с разными именами полей?
Контекст: яя пытаюсь интегрироваться с DocuSign 'Служба уведомлений о подключении. Я'Мы настроили службу WCF с помощью метода DocuSignConnectUpdate, который принимает DocuSignEnvelopeInformation в качестве единственного параметра, как указано в DocuSign. Этот объект DocuSignEnvelopeInformation происходит из ссылки наих API, чтобы они могли передать этот объект моему веб-сервису, и я точно знаю, чего ожидать. DocuSign запрашивает мой служебный адрес и пространство имен, которые я настроил на их сайте.
Эта проблема: XML, который отправляет DocuSign, - это то, чего я ожидал. DocuSignEnvelopeInformation и ее дочерние элементы находятся в пространстве имен "http://www.docusign.net/API/3.0" и имена элементов соответствуют именам объектов:
...
Но мой веб-сервис ожидает чего-то другого, в неправильном пространстве имен и с измененными именами элементов. Вот как определяется метод DocuSignConnectUpdate в моем WSDL:
И вот как это определяется как тип DocuSignEnvelopeInformation в моем WSDL:
Имена элементов, такие как envelopeStatusField, являются именамичастный переменные, используемые в автоматически сгенерированном коде. Имена открытых свойств совпадают с xml, который отправляет DocuSign. Сгенерированный автоматически код также помечает каждый объект правильным пространством имен docusign, используя XmlTypeAttribute. Поэтому, глядя на автоматически сгенерированный код, я ожидаю, что мой сервис будет доволен вводом, но сгенерированный WSDL отличается, как показано выше, и мой сервис не может десериализовать xml.
Некоторый код: Автоматически сгенерированное объявление DocuSignEnvelopeInformation:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.docusign.net/API/3.0")]
public partial class DocuSignEnvelopeInformation : object, System.ComponentModel.INotifyPropertyChanged {
private EnvelopeStatus envelopeStatusField;
private DocumentPDF[] documentPDFsField;
private string timeZoneField;
private int timeZoneOffsetField;
private bool timeZoneOffsetFieldSpecified;
///
[System.Xml.Serialization.XmlElementAttribute(Order=0)]
public EnvelopeStatus EnvelopeStatus {
...
...
OperationContract для единственного метода:
[SoapHeaders]
[ServiceContract(Namespace = "http:/MyNameSpace")]
public interface IDocusignEventListener
{
[OperationContract]
[FaultContract(typeof(ErrorMessageCollection), Action = Constants.FaultAction)]
string DocuSignConnectUpdate(DocuSignEnvelopeInformation DocuSignEnvelopeInformation);
}
Метод, который вызывает DocuSign
[ServiceBehavior(Namespace = "http:/MyNameSpace", ConfigurationName = "DocusignEventListener")]
public class DocusignEventListener : IDocusignEventListener
{
public string DocuSignConnectUpdate(DocuSignEnvelopeInformation DocuSignEnvelopeInformation)
{
...
return DocuSignEnvelopeInformation.EnvelopeStatus.EnvelopeID;
}
}
Итак, опять же, вопрос в том, почему wsdl появляется таким образом? Почему объект отличается от ссылки, из которой я его извлек? И что еще более важно, я могу это исправить?