Как прослушивать конечную точку ретрансляции Azure в HTTP и HTTPS?
Я пытаюсь использовать реле Azure WCF, создавая прослушиватель через экземпляр ServiceHost. Это работает хорошо, но я не могу заставить его работать как по HTTP, так и по HTTPS. Я знаю, это кажется странным, но это требование, которое у меня есть.
Вот мой код:
Uri httpUri = ServiceBusEnvironment.CreateServiceUri(Uri.UriSchemeHttp, "MYNAMESPACE", "TEST");
Uri httpsUri = ServiceBusEnvironment.CreateServiceUri(Uri.UriSchemeHttps, "MYNAMESPACE", "TEST");
WebServiceHost sh = new WebServiceHost(typeof(TestAPI), httpsUri, httpUri);
sh.Open();
И вот мой конф:
<bindings>
<webHttpRelayBinding>
<binding name="https" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" transferMode="Streamed" sendTimeout="00:15:00">
<security mode="Transport" relayClientAuthenticationType="None"/>
</binding>
<binding name="http" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" transferMode="Streamed" sendTimeout="00:15:00">
<security mode="None" relayClientAuthenticationType="None"/>
</binding>
</webHttpRelayBinding>
</bindings>
<services>
<service name="TestAPI" behaviorConfiguration="default">
<endpoint name="MobileEndpointHttps" contract="ITestAPI" binding="webHttpRelayBinding" bindingConfiguration="https" behaviorConfiguration="sbTokenProviderTest" address="" />
<endpoint name="MobileEndpoint" contract="ITestAPI" binding="webHttpRelayBinding" bindingConfiguration="http" behaviorConfiguration="sbTokenProviderTest" address="" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="sbTokenProviderTest">
<webHttp/>
<serviceRegistrySettings discoveryMode="Public" />
<transportClientEndpointBehavior>
<tokenProvider>
<sharedAccessSignature keyName="RootManageSharedAccessKey" key="MYKEY"/>
</tokenProvider>
</transportClientEndpointBehavior>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="default">
<serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false"/>
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
HttpGetEnabled & httpsGetEnabled, кажется, не требуется, чтобы заставить его работать один, поэтому я отключил его, чтобы избежать предупреждения netsh.
С этим конфигом я получаю следующую ошибку:
System.InvalidOperationException: ChannelDispatcher по адресу 'sb://mynamespace.servicebus.windows.net/TEST/' с контрактом (ами) "ITestAPI" "не может открыть свой IChannelListener. ---> System.InvalidOperationException: регистрация уже существует для Uri 'sb://mynamespace.servicebus.windows.net/TEST/'.
Это по крайней мере возможно? Нужна ваша помощь:(
1 ответ
Если вы просто создаете одну конечную точку с режимом безопасности ="None" и relayClientAuthenticationType="None", не принимает ли он трафик как по HTTP, так и по HTTPS?