SOAP-ERROR при использовании службы .NET SOAP и передаче параметра сложного типа - PullRequest
0 голосов
/ 12 ноября 2018

TL, DR: при использовании службы SOAP PHP, кажется, всегда требует, чтобы все типы значений были включены в объекты, но .NET, похоже, не предлагает,

У меня есть SOAP-сервис, написанный на .NET (.asmx), который используется клиентом PHP, разработанным сторонней организацией.

У меня есть [DataMember] типа Guid, который представляетникаких проблем с моей стороны, я могу опустить его, когда я инициализирую свой комплексный объект параметра в моем "тестовом" консольном приложении, и никаких ошибок не возникает, вот урезанная версия кода и "тестовое" приложение:

[DataContract]
public class ComplexType
{
    [DataMember] public Guid Id {get; set;}
    [DataMember] public string Member1 {get; set;}
    [DataMember] public string Member2 {get; set;}
}

// -------------------

// this is a console application
var client = new MyServiceRef.MyServiceClient();
var obj = new MyServiceRef.ComplexType
{
    Member1 = "Data1",
    Member2 = "Data2"
    // I don't include here the 'Id' member of ComplexType
};
var ret = client.MyMethod(obj);
// Works with no errors
// Inspecting obj I see 'Id' is auto-initialized as Guid.Empty

// -------------------

Я также протестировал сервис в SOAPUI, пропуск поля в полезной нагрузке не вызывает никаких проблем, и все работает.

С другой стороны, при использовании сервиса в PHP они испытывают этоошибка

SOAP-ERROR: Encoding: object has no 'Id' property

Похоже, что PHP более строг в этом отношении, но я не знаю достаточно о PHP, чтобы дать содержательное предложение.

Временное решение IМожно подумать, что с моей стороны все делается Nullable<T>: это решит эту конкретную проблему, но является ли это правильным подходом к этой ситуации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...