Использование SoapCore 1.0.0 с. NET Core 3.1 для реализации более старой службы WCF. У меня все готово и я создаю WSDL, но WSDL не верный. Здесь я упросту случаи из того, что я реализовал, на самом деле.
У меня есть модель данных, которая довольно проста c, и в общем виде:
[DataContract]
public class TopLevelInputItem
{
[DataMember]
public string SomePrimitiveValue {get; set;}
[DataMember]
public NextLevelInputItem SomeComplexValue {get; set;}
}
[DataContract]
public class NextLevelInputItem
{
[DataMember]
public string AnotherPrimitiveValue {get; set;}
}
[DataContract]
public class OutputResultItem
{
[DataMember]
public List<string> SomeOutputStrings {get; set;}
}
Работа с этим набором сервисов, которые, конечно, не связаны с представлением вещи как веб-сервиса, поэтому я пропущу этот код. Сервисы доступны через набор контроллеров, суть которых состоит в следующем:
[ServiceContract]
public interface IHandyWebService
{
[OperationContract]
public Task<List<OutputResultItem>> UpdateSomethingPlease(
List<TopLevelInputItem> ListOfThings);
}
public class HandyWebService : IHandyWebService
{
public async Task<List<OutputResultItem>> UpdateSomethingPlease(
List<TopLevelInputItem> ListOfThings)
{
return await aService.DoAnUpdatesAsync(ListOfThings);
}
}
Соответствующая часть моего Startup.cs в проекте API выглядит следующим образом:
app.UseSoapEndpoint<IHandyWebService>("/HandyWebService", new BasicHttpsBinding(), SoapSerializer.XmlSerializer);
Это действительно просто основа c, но, конечно, намного больше. Мой WSDL формируется неправильно с этой настройкой, и я надеюсь, что смогу объяснить с определенной точностью, что происходит.
Для описанного метода я получу что-то вроде:
<wsdl:message name="IHandyWebService_UpdateSomethingPlease_OutputMessage">
<wsdl:part name="parameters" element="tns:List`1"/>
</wsdl:message>
Т.е. спецификация "List`1", а не что-то вроде "ArrayOfStrings" или другого типа, указанного в методе и аннотированного с помощью DataMember.
Кроме того, для моих входных объектов определены определения Примитивные значения вообще не отображаются нигде в WSDL.
Модель данных и контроллеры - это именно то, что было для службы, когда она была основана на WCF, и все это работало великолепно. Я ожидал, что смогу все это переносить, но, видимо, это не так. Чего мне не хватает?
Возможно, часть II этого вопроса: реализует ли это в. NET Core, с SoapCore, действительно лучший угол атаки? Есть ли другой / лучший способ сделать это?