Я пытаюсь разместить один и тот же сервис на одном и том же веб-сайте, используя две конечные точки: одну HTTP и другую HTTPS.
Проблема в том, что я могу с радостью позвонить в одну службу (какая бы программа мне ни позвонила в первую очередь), но затем не удается дозвониться до другой, пока я не сброслю и не попробую снова. Так что я могу счастливо звонить обоим, но по одному, пока процесс не перезапустится.
Я исчерпал (или думаю, что у меня есть) все соответствующие вопросы и ответы и документы, которые я смог найти, и ни один из них, похоже, не помог мне. Уровень документации MSDN относительно этих случаев (который должен быть широко распространенным) ужасен, и ничто не работает, как кажется.
Я безуспешно использовал Host / BaseAddresses / BaseAddress, и всякий раз, когда я его использовал, я получаю другую ошибку (не могу найти схему HTTPS).
У меня есть папка с именем Secure, которая включена для HTTPS внутри IIS.
Я отключил mex, поэтому никакие метаданные, которые я получил, прошли мимо предыдущих ошибок.
Кто-нибудь получил подсказку? Я бестолковый ...
<service name="Namespace.MyService" behaviorConfiguration="MyBehaviour">
<host>
<baseAddresses>
</baseAddresses>
</host>
<endpoint address="http://localhost/Services/MyService.svc/MyService"
name="MyService" binding="wsHttpBinding"
bindingConfiguration="myWsHttpBinding" contract="Namespace.IMyService" />
<endpoint address="https://localhost/Services/Secure/MySslService.svc/MySslService"
name="MySslService" binding="basicHttpBinding"
bindingConfiguration="MySslServiceBinding" contract="Namespace.IMyService" />
</service>
.....
<behavior name="MyBehaviour">
<custom1/>
<custom2/>
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false"/>
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="CustomProvider"/>
<serviceCredentials>
<serviceCertificate findValue="Some" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="SomeClass, SomeDll"/>
</serviceCredentials>
</behavior>
Исходная ошибка:
Регистрация для URI уже существует
«http://localhost/Services/....'.
Описание: необработанное исключение
произошло во время исполнения
текущий веб-запрос. Пожалуйста, просмотрите
трассировка стека для получения дополнительной информации о
ошибка и откуда она возникла
код.
Сведения об исключении:
System.InvalidOperationException: A
регистрация уже существует для URI
«http://localhost/Services/....'.
Ошибка источника:
Создано необработанное исключение
во время исполнения текущего
веб-запрос. Информация относительно
Происхождение и место исключения
можно определить с помощью исключения
трассировка стека ниже.
Трассировка стека:
[InvalidOperationException: A
регистрация уже существует для URI
System.ServiceModel.Channels.UriPrefixTable 1.RegisterUri(Uri
uri, HostNameComparisonMode
hostNameComparisonMode, TItem item)
+320 System.ServiceModel.Channels.HttpTransportManager.Register(TransportChannelListener
channelListener) +380<br>
System.ServiceModel.Channels.TransportManager.Open(TransportChannelListener
channelListener) +816<br>
System.ServiceModel.Channels.TransportManagerContainer.Open(SelectTransportManagersCallback
selectTransportManagerCallback) +121<br>
System.ServiceModel.Channels.HttpChannelListener.OnOpen(TimeSpan
timeout) +125<br>
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan
timeout) +789<br>
System.ServiceModel.Channels.DatagramChannelDemuxer
2.OnOuterListenerOpen (ChannelDemuxerFilter
фильтр, слушатель IChannelListener,
TimeSpan timeout) + 606
System.ServiceModel.Channels.SingletonChannelListener`3.OnOpen (TimeSpan
тайм-аут) + 91
System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan
тайм-аут) + 789
System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen (TimeSpan
тайм-аут) + 375
Вот ошибка журнала трассировки WCF:
ChannelDispatcher на
http://localhost/Services/...' с
контракт (ы) "IMyService" не может
открыть его IChannelListener.
System.ServiceModel.Dispatcher.ChannelDispatcher.OnOpen (TimeSpan
тайм-аут)
System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan
тайм-аут)
System.ServiceModel.ServiceHostBase.OnOpen (TimeSpan
тайм-аут)
System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan
тайм-аут)
System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService (String
normalizedVirtualPath)
System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable (String
normalizedVirtualPath)
System.ServiceModel.ServiceHostingEnvironment.EnsureServiceAvailableFast (String
relativeVirtualPath)
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest ()
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest ()
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest (Объект
государство)
System.ServiceModel.AspNetPartialTrustHelpers.PartialTrustInvoke (ContextCallback
обратный вызов, состояние объекта)
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequestWithFlow (Объект
государство)
System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback (UInt32
errorCode, UInt32 numBytes,
NativeOverlapped * nativeOverlapped)
System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame (UInt32
ошибка, UInt32 bytesRead,
NativeOverlapped * nativeOverlapped)
System.Threading._IOCompletionCallback.PerformIOCompletionCallback (UInt32
errorCode, UInt32 numBytes,
NativeOverlapped * POVERLAP)