Как прослушивать конечную точку ретрансляции 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?

Другие вопросы по тегам