2

同じ名前空間内の異なるアドレスを持つ2つの異なるリレーエンドポイントによって公開されているサービスをアクティブ化できません。それらの1つを削除すると、サービスが正常にアクティブ化されるため、構成は正常です。バインディングのタイプを変更し、名前空間を変更し、1つだけではなく2つの動作構成を追加しようとしましたが、常に同じエラーが発生します(下部)。

私が何かを逃しているかどうか誰かが知っていますか?同じ名前空間に2つのリレーエンドポイントを含めることはできますか?

<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'が既に含まれているため、値をコレクションに追加できませんでした。このコレクションは、各タイプの1つのインスタンスのみをサポートします。パラメータ名: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エンドポイント)at System.ServiceModel.Description.ServiceMetadataBehavior.MetadataExtensionInitializer.GenerateMetadata()at System.ServiceModel.Description.ServiceMetadataExtension.EnsureInitialized()at System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.InitializationData.InitializeFrom(ServiceMetadataExtension System.ServiceModel.Description.ServiceMetadataExtension.HttpGetImpl.ProcessHttpRequest(Message httpGetRequest )at SyncInvokeGet(Object、Object []、Object [])atSystem.ServiceModel.Dispatcher.SyncMethodInvoker。System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&rpc)at System.ServiceModel.DispatcherでInvoke(Object instance、Object [] input、Object []&outputs) System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)の.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&rpc)Process(ブールisOperationContextSet)Process(ブール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 に答える