2

我无法激活由同一 NAMESPACE 中的两个不同中继端点公开但地址不同的服务。如果我删除其中一个服务激活正常,所以配置很好。我尝试更改绑定的类型,更改名称空间,添加两个行为配置而不是仅添加一个,但我总是得到相同的错误(在底部)。

有人知道我是否遗漏了什么吗?我可以在同一个命名空间中有两个中继端点吗?

<service name="Service">    
        <endpoint contract="IService"  binding="basicHttpRelayBinding" name="b1 "
                  address="http://**NAMESPACE**.servicebus.windows.net/s1"  behaviorConfiguration="credentials"/>    
        <endpoint contract="IService" binding="webHttpRelayBinding" name="wh1"
                  address="https://**NAMESPACE**.servicebus.windows.net/s2"  behaviorConfiguration="credentials"/>                                       
</service>    
<behavior name="credentials">
            <serviceRegistrySettings discoveryMode="Public" displayName="Auxiliar" />
            <transportClientEndpointBehavior>
                <tokenProvider>
                    <sharedSecret issuerName="owner" issuerSecret="**KEY**" />
                </tokenProvider>
            </transportClientEndpointBehavior>
   </behavior>

错误是:

一个 ExceptionDetail,可能由 IncludeExceptionDetailInFaults=true 创建,其值为:System.ArgumentException:该值无法添加到集合中,因为集合已包含相同类型的项:“Microsoft.ServiceBus.NameSettings”。此集合仅支持每种类型的一个实例。参数名称:System.Collections.Generic.KeyedByTypeCollection 处的项1.InsertItem(Int32 index, TItem item) at Microsoft.ServiceBus.ServiceRegistrySettings.System.ServiceModel.Description.IEndpointBehavior.AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) at System.ServiceModel.Description.DispatcherBuilder.AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection parameters) at System.ServiceModel.Description.DispatcherBuilder.GetBindingParameters(ServiceHostBase serviceHost, Collection1 个端点)在 System.ServiceModel.Description.ServiceMetadataExtension.EnsureInitialized() 在 System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.InitializationData.InitializeFrom(ServiceMetadataExtension extension) 在 System.ServiceModel.Description.ServiceMetadataBehavior.MetadataExtensionInitializer.GenerateMetadata()。 ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.GetInitData() 在 System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.TryHandleDocumentationRequest(Message httpGetRequest, String[] 查询, Message& replyMessage) 在 System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.ProcessHttpRequest(Message httpGetRequest ) 在 System.ServiceModel.Dispatcher.SyncMethodInvoker 的 SyncInvokeGet(Object , Object[] , Object[] )。在 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher .ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) 在 System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)进程(布尔 isOperationContextSet)进程(布尔 isOperationContextSet)

4

1 回答 1

1

您发现的问题是/behavior/serviceRegistrySettings/@displayName两个服务定义发生冲突。如果您想控制displayName每个端点,那么您需要创建单独的命名行为。在复制端点合同时,您需要确保显示名称是唯一的。

选项 #1 - 移除displayName

   <behavior name="credentials">
     <serviceRegistrySettings discoveryMode="Public" />
       <transportClientEndpointBehavior>
         <tokenProvider>
           <sharedSecret issuerName="owner" issuerSecret="**KEY**" />
         </tokenProvider>
       </transportClientEndpointBehavior>
   </behavior>

选项 #2 - 创建重复的行为配置

   <service name="Service">    
        <endpoint contract="IService"  binding="basicHttpRelayBinding" name="b1 "
                  address="http://**NAMESPACE**.servicebus.windows.net/s1"  behaviorConfiguration="basicCredentials"/>    
        <endpoint contract="IService" binding="webHttpRelayBinding" name="wh1"
                  address="https://**NAMESPACE**.servicebus.windows.net/s2"  behaviorConfiguration="webHttpCredentials"/>                                       
   </service>   
   <behavior name="basicCredentials">
     <serviceRegistrySettings discoveryMode="Public" displayName="AuxiliarBasic"/>
       <transportClientEndpointBehavior>
         <tokenProvider>
           <sharedSecret issuerName="owner" issuerSecret="**KEY**" />
         </tokenProvider>
       </transportClientEndpointBehavior>
   </behavior>
   <behavior name="webHttpCredentials">
     <serviceRegistrySettings discoveryMode="Public" displayName="AuxiliarWebHttp"/>
       <transportClientEndpointBehavior>
         <tokenProvider>
           <sharedSecret issuerName="owner" issuerSecret="**KEY**" />
         </tokenProvider>
       </transportClientEndpointBehavior>
   </behavior>
于 2012-09-04T16:47:27.937 回答