Ошибка при вызове веб-API с размещенной на сервере Azure Service Fabric

Я использую новый проект Azure Service Fabric. Проект содержит 2 службы с отслеживанием состояния, как показано на изображении ниже:

Дерево решений в Visual Studio

Когда я запускаю приложение, проводник успешно отображается, как показано ниже:

Service Fabric Explorer

Но когда я пытаюсь использовать свой API, http://localhost:19080/api/values, я получите ошибку ниже Invalid argument. Не попадает в контроллер:

Сообщение об ошибке недопустимого аргумента

Пожалуйста, посоветуйте, как решить эту ошибку.


person Hany Habib    schedule 04.06.2018    source источник


Ответы (2)


Как упоминалось в LoekD, порт 19080 используется обозревателем Service Fabric. Вы можете найти фактический порт вашего приложения в ServiceManifest.xml проекта API. Должен быть раздел Ресурсы с конечными точками вроде:

<Resources>
 <Endpoints>
   <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="8315" />
 </Endpoints>
</Resources>
person Alex Riabov    schedule 04.06.2018
comment
Конфигурация конечной точки не требуется для использования Kestrel. И он использует динамический порт, как упоминалось в статье. Чтобы использовать динамическое назначение портов с Kestrel, просто полностью опустите конфигурацию конечной точки в ServiceManifest.xml и не передавайте имя конечной точки в KestrelCommunicationListener. Итак, как я могу получить этот динамический номер порта - person Hany Habib; 05.06.2018
comment
@HanyHabib Зачем вам нужен динамический порт? - person Alex Riabov; 05.06.2018
comment
Мне не нужно, я просто копаюсь в этой структуре и вижу ее возможности. Я использовал статический порт, поскольку вы упомянули, что он не работает, если я не изменю ServiceFabricIntegrationOptions.UseUniqueServiceUrl на ServiceFabricIntegrationOptions.None. - person Hany Habib; 05.06.2018
comment
Теперь я понимаю, что вы имеете в виду. Чтобы получить динамический порт, вам необходимо использовать службу именования для разрешения конечной точки вашей службы. Хотя я сомневаюсь, что к нему можно получить доступ извне. Должно получиться var resolver = ServicePartitionResolver.GetDefault(); var cancellationToken = new System.Threading.CancellationToken(); var endpoint = await resolver.ResolveAsync(new Uri(“<name of your service>”), new ServicePartitionKey(), cancellationToken); - person Alex Riabov; 05.06.2018

Порт 19080 используется Service Fabric исследователь. Вы должны выбрать другой порт для запуска собственной службы.

person LoekD    schedule 04.06.2018
comment
Конфигурация конечной точки не требуется для использования Kestrel. И он использует динамический порт, как упоминалось в статье. Чтобы использовать динамическое назначение портов с Kestrel, просто полностью опустите конфигурацию конечной точки в ServiceManifest.xml и не передавайте имя конечной точки в KestrelCommunicationListener. - person Hany Habib; 05.06.2018
comment
Итак, как я могу получить этот динамический номер порта? - person Hany Habib; 05.06.2018