27 марта 2020 г. ОБНОВЛЕНИЕ
Прошло 4 дня, и сейчас я обшил стены своего офиса. :)
БОЛЬШОЙ ВОПРОС
Это будет работать только локально, если я изменю следующие настройки Анонимная аутентификация = включена
Кто-нибудь знает, как обойти эту проблему с - IIS Express - Visual Studio 2017
Я вышел из рабочего кода и создал тест локально, и сейчас я застрял только в одной проблеме.
Аутентификация теперь моя БЛОКЕР
Мне нужно будет использовать настройки для развертывания, поскольку у меня нет никакого контроля над DEV | СИТ | UAT | PROD --- IAAS или PAAS - я могу только код CI и CD.
Я удалил все ---- Конфигурация Это не было в исходном коде
Мне нужно закомментировать код в файле
MultipleBindingServiceHost.cs
Localhost жалуется на 2 URL (я вернусь, как только исправлю все дыры в безопасности кода.
string rawUrl = ConfigurationManager.AppSettings["tsRawUrl"];
ServiceEndpoint endpoint = AddServiceEndpoint(typeof(ITicketService), httpBinding, baseAddress, new Uri(rawUrl));
endpoint.Behaviors.Add(new WebHttpBehavior());
#if (!DEBUG)
string vanityUrl = ConfigurationManager.AppSettings["tsVanityUrl"];
ServiceEndpoint endpoint2 = AddServiceEndpoint(typeof(ITicketService), httpBinding, baseAddress, new Uri(vanityUrl));
endpoint2.Behaviors.Add(new WebHttpBehavior());
#endif
23 марта 2020 г.
Я пытался выяснить WCF и Разработка локальной машины в течение прошлой недели, и теперь я прихожу к stackoverflow для помощи сообществам.
Мне была поручена поддержка приложения, имеющего две службы WCF
Web.config appSettings Настройки следующие:
<appSettings>
<add key="tsVanityUrl" value="http://localhost:1574/TicketService.svc" />
<add key="tsRawUrl" value="http://localhost:1574/TicketService.svc" />
<add key="fsVanityUrl" value="http://localhost:1574/FileService.svc" />
<add key="fsRawUrl" value="http://localhost:1574/FileService.svc" />
</appSettings>
Web.config system.serviceModel
<system.serviceModel>
<!-- START RBD Additions for Local Development -->
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
<behaviors>
<serviceBehaviors>
<behavior name="TicketBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
<behavior name="FileBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="TicketSystem.TicketService" behaviorConfiguration="TicketBehavior">
<endpoint address="/TicketService.svc"
binding="basicHttpBinding"
contract="TicketSystem.ITicketService"
/>
</service>
<service name="TicketSystem.FileService" behaviorConfiguration="FileBehavior">
<endpoint address="/FileService.svc"
binding="basicHttpBinding"
contract="TicketSystem.IFileService"
/>
</service>
</services>
<!-- END RBD Additions for Local Development -->
</system.serviceModel>
Я получаю следующую ошибку :
Невозможно добавить значение в коллекцию, поскольку коллекция уже Элемент того же типа: 'System.ServiceModel.Description.ServiceMetadataBehavior'. Эта коллекция поддерживает только один экземпляр каждого типа. Имя параметра: item
Это указывает на файл MultipleBindingServiceHost.cs
protected override void ApplyConfiguration()
{
base.ApplyConfiguration();
ServiceMetadataBehavior mexBehavior = new ServiceMetadataBehavior();
Description.Behaviors.Add(mexBehavior);
WebHttpBinding httpBinding = new WebHttpBinding();
foreach (Uri baseAddress in BaseAddresses)
{
if (baseAddress.Scheme == Uri.UriSchemeHttp)
{
httpBinding.Security.Mode = WebHttpSecurityMode.None;
mexBehavior.HttpGetEnabled = true;
}
else if (baseAddress.Scheme == Uri.UriSchemeHttps)
{
httpBinding.Security.Mode = WebHttpSecurityMode.Transport;
httpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
mexBehavior.HttpsGetEnabled = true;
}
//ServiceEndpoint endpoint = AddServiceEndpoint(typeof(TicketSystem.ITicketService),
// httpBinding,
// baseAddress);
//endpoint.Behaviors.Add(new WebHttpBehavior());
//Fix for 404 Vanity URL Issue
string rawUrl = ConfigurationManager.AppSettings["tsRawUrl"];
ServiceEndpoint endpoint = AddServiceEndpoint(typeof(ITicketService), httpBinding, baseAddress, new Uri(rawUrl));
endpoint.Behaviors.Add(new WebHttpBehavior());
string vanityUrl = ConfigurationManager.AppSettings["tsVanityUrl"];
ServiceEndpoint endpoint2 = AddServiceEndpoint(typeof(ITicketService), httpBinding, baseAddress, new Uri(vanityUrl));
endpoint2.Behaviors.Add(new WebHttpBehavior());
break;
}
}
}
Я знаю, что я очень близок и, возможно, что-то упустил очень просто, но потратив на это несколько дней, я должен опубликовать в стеке поток, чтобы сервисы работали на моей локальной машине.