Небольшая проблема. Когда я запускаю приложение ServiceStack API на моей машине Windows, пространства имен отображаются правильно, как я их укажу. Но когда я запускаю службу на компьютере Linux с mod_mono. Затем эти пространства имен переопределяются чем-то другим. Пожалуйста, смотрите мой код ниже:Изменение пространства имен ServiceStack не работает
DTO
namespace API_ESERVICES_NOTIFICATION
{
[DataContract(Namespace = "urn:com.example:service:20130308")]
public class GetAccountNotification
{
[DataMember]
public GetAccountResponseTO getAccountResponse {
get;
set;
}
}
}
Окна сгенерированных SOAP11 XML
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetAccountNotification xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:com.example:service:20130308">
<getAccountResponse xmlns:d2p1="urn:com.example:service:entity:20130308">
Linux Mod_Mono
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetAccountNotification xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/API_ESERVICES_NOTIFICATION">
<getAccountResponse xmlns:d2p1="http://schemas.datacontract.org/2004/07/API_ESERVICES_NOTIFICATION.Model">
Теперь как я получаю Linux пространство имен будет урна: com.example: service: entity: 20130308 и urn: com.example: service: 20130308, а не http://schemas.datacontract.org/2004/07/API_ESERVICES_NOTIFICATION.Model. Любая помощь будет оценена.
Я попробовал это, к сожалению это не работает, я представлю ошибку, но к сожалению, мы никогда не получим новую моно-версию в Linux. Поддержка поддерживается только до 2.10.8, которая уже стоит за текущей версией. Поддерживает ли serviceStack System.xml.serialization? как альтернатива? –
http://mono-project.com/DistroPackages/Ubuntu –
Нет, ServiceStack не имеет собственного XML-сериализатора, он просто использует DataContractSerializer под капотом. Вы можете поменять его, зарегистрировав свой собственный в 'IAppHost.ContentTypeFilters', но вам нужно найти тот, который хорошо работает в Mono. – mythz