У меня есть веб-сервис, который возвращает простой объект:декларации Удаление пространства имен из ответа веб-службы
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.4927")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.SoapTypeAttribute(Namespace="urn:CHAMADO")]
public partial class STRUCCHAMADOOUT : object, System.ComponentModel.INotifyPropertyChanged {
private string cODField;
private string mSGField;
/// <remarks/>
public string COD {
get {
return this.cODField;
}
set {
this.cODField = value;
this.RaisePropertyChanged("COD");
}
}
/// <remarks/>
public string MSG {
get {
return this.mSGField;
}
set {
this.mSGField = value;
this.RaisePropertyChanged("MSG");
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
этот класс был создан с помощью wsdl.exe, на основе файла WSDL, предоставленной клиентом. Это веб-метод:
[WebMethod(MessageName="CHAMADORequest")]
[SoapRpcMethod(
Action = "urn:CHAMADO#CHAMADO",
RequestNamespace = "urn:CHAMADO",
RequestElementName = "CHAMADO",
ResponseNamespace = "",
ResponseElementName = "return",
Use = SoapBindingUse.Literal
)]
[return: XmlElement("return")]
public STRUCCHAMADOOUT CHAMADO(STRUCCHAMADOIN ENTRADA)
{
STRUCCHAMADOOUT result = new STRUCCHAMADOOUT();
try {
string str = Util.GetRequestXML();
persist(getResult<Entidades.Chamado>(str, "ENTRADA", string.Empty));
result.COD = "1";
result.MSG = "Operação realizada com sucesso";
} catch (Exception ex) {
result.COD = "0";
result.MSG = ex.Message + Environment.NewLine + ex.StackTrace;
}
return result;
}
Клиент говорит, что его система поднимает ошибку, потому что ответ сервис имеет пространства имен декларации, так же, как это:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CHAMADOResponse xmlns="urn:CHAMADO" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<return xmlns="">
<COD xmlns="urn:CHAMADO">1</COD>
<MSG xmlns="urn:CHAMADO">Operação realizada com sucesso</MSG>
</return>
</CHAMADOResponse>
Теперь, мне удалось удалить пространства имен от COD и MSG, применив attuteute WebServiceBinding(ConformsTo = WsiProfiles.None)
к классу службы и установив ResponseNamespace
в пустую строку. Но CHAMADOResponse
все еще имеют декларацию пространств имен. Я почти уверен, что так не должно быть. На самом деле, я не считаю, что пространство имен является проблемой вообще. С самого начала этот проект был трудным, так как нам приходилось создавать службы, которые соответствовали бы устаревшему wsdl.
Мой вопрос: есть ли способ удалить все объявления с именами из ответа веб-службы?
Редактировать
Я вошел ответ сервера и получил это:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<CHAMADOResponse>
<return>
<COD>1</COD>
<MSG>Operação realizada com sucesso</MSG>
</return>
</CHAMADOResponse>
</soap:Body>
</soap:Envelope>
Там нет объявления пространства имен в теле сообщения. Но клиент говорит, что он получил это:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!-- Request Message Mapping -->
<CHAMADOResponse xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>
<return>
<COD>1</COD>
<MSG>Operação realizada com sucesso</MSG>
</return>
</CHAMADOResponse>
Я что-то пропустил?
Если класс был создан на основе WSDL, предоставленного клиентом, этот клиент должен лучше узнать, как использовать и обрабатывать пространства имен XML –