我有一个WCF服务,我使用天蓝色服务总线中继消费。我试图公开mex端点,但我遇到了这个错误
无法找到与端点的方案sb匹配的基址 绑定NetTcpRelayBinding。注册的基地址方案是 [HTTP]。
我的配置文件看起来像这样,我在这里做错了什么?
<system.serviceModel>
<bindings>
<netTcpRelayBinding>
<binding name="default">
<security mode="None" />
</binding>
</netTcpRelayBinding>
</bindings>
<extensions>
<behaviorExtensions>
<add name="transportClientEndpointBehavior" type="Microsoft.ServiceBus.Configuration.TransportClientEndpointBehaviorElement, Microsoft.ServiceBus, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="serviceRegistrySettings" type="Microsoft.ServiceBus.Configuration.ServiceRegistrySettingsElement, Microsoft.ServiceBus, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</behaviorExtensions>
<bindingExtensions>
<!--<add name="basicHttpRelayBinding" type="Microsoft.ServiceBus.Configuration.BasicHttpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>-->
<add name="netTcpRelayBinding" type="Microsoft.ServiceBus.Configuration.NetTcpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</bindingExtensions>
</extensions>
<services>
<service behaviorConfiguration="serviceMetadata" name="Namespace.TestService">
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="sb://[my namespace].servicebus.windows.net/Test" behaviorConfiguration="sbTokenProvider" binding="netTcpRelayBinding" bindingConfiguration="default" contract="Namespace.ITestContract" />
<endpoint name="MexEndpoint" contract="IMetadataExchange" binding="netTcpRelayBinding" bindingConfiguration="default" address="mex" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="serviceMetadata">
<serviceMetadata />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="sbTokenProvider">
<transportClientEndpointBehavior>
<tokenProvider>
<sharedAccessSignature keyName="RootManageSharedAccessKey" key="[key]" />
</tokenProvider>
</transportClientEndpointBehavior>
<serviceRegistrySettings discoveryMode="Public" />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
答案 0 :(得分:1)
这有点棘手,因为在WCF中公开mex端点的模型有点不幸被内联到服务本身。使用Service Bus,您无法在另一个侦听器的范围内侦听端点侦听器。
技巧是使服务端点和mex端点并排放置而不是嵌套,共享一个公共基地址,例如,在https://example.servicebus.windows.net/mysvc下方,您将拥有&#34; service&#34;和&#34; mex&#34;并排侧。
我正在更新Relay示例,因此这个版本的自述文件仍然需要重写,并且它还不能保证可以正常工作,但是你可能想看一看App.config and at the Program.cs here。如果要为NetTcp服务公开MEX,则需要https://和sb://前缀基地址。
该示例还说明了如何修复服务调试行为的帮助页面。
答案 1 :(得分:0)
你需要声明一个与mexHttpBinding兼容的基地址(顺便说一下http)。 2种解决方案是可能的:
1 /在主机部分的服务部分添加baseAddress,如下所示:
<service ...>
...
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/Test" />
</baseAddresses>
</host>
</service>
您的mex端点将在http://localhost:8080/Test/mex上收听。
2 / - 或 - 只需在mex端点添加完整地址。
<endpoint address="http://[namespace].servicebus.windows.net/Test/mex" binding="mexHttpBinding" contract="IMetadataExchange"/>