2011-10-15 14 views
13

Ho la seguente configurazione per il mio servizio WCF:WCF cosa dovrebbe essere endpointConfigurationName?

<system.serviceModel> 
<services> 
    <service behaviorConfiguration="After.BehaviourConfig" name="ServiceInstancingDemo.Service1"> 
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="After.BindingConfig" 
     name="After.ConfigName" contract="ServiceInstancingDemo.IService1"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://rb-t510/NGCInstancing/Service1.svc" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 
<bindings> 
    <wsHttpBinding> 
    <binding name="After.BindingConfig" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" maxBufferPoolSize="524288111" maxReceivedMessageSize="524288111" allowCookies="false"> 
     <security mode="None" /> 
    </binding> 
    </wsHttpBinding> 
</bindings> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="After.BehaviourConfig"> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceThrottling maxConcurrentCalls="30" maxConcurrentInstances="2147483647" maxConcurrentSessions="30" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

io sono in grado di chiamare il servizio con il seguente codice client:

NGC.Service1Client ngc = new NGC.Service1Client(); 

     var taskA = Task<string>.Factory.StartNew(() => ngc.WaitThenReturnString(5)); 

     this.listBox1.Items.Add(taskA.Result); 

La configurazione per il cliente che chiama il servizio è il seguente:

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="Before" closeTimeout="00:01:00" openTimeout="00:01:00" 
       receiveTimeout="00:10:00" sendTimeout="00:01:00" maxBufferPoolSize="524288111" 
       maxReceivedMessageSize="524288111" allowCookies="false" /> 
      <binding name="After" closeTimeout="00:01:00" openTimeout="00:01:00" 
       receiveTimeout="00:10:00" sendTimeout="00:01:00" maxBufferPoolSize="524288111" 
       maxReceivedMessageSize="524288111" allowCookies="false"> 
       <security mode="None" /> 
      </binding> 
      <binding name="WSHttpBinding_IService1" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
       allowCookies="false"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <reliableSession ordered="true" inactivityTimeout="00:10:00" 
        enabled="false" /> 
       <security mode="None"> 
        <transport clientCredentialType="Windows" proxyCredentialType="None" 
         realm="" /> 
        <message clientCredentialType="Windows" negotiateServiceCredential="true" /> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://rb-t510/NGCInstancing/Service1.svc" 
      binding="wsHttpBinding" bindingConfiguration="Before" contract="NGCInstance.IService1" 
      name="Before" /> 
     <endpoint address="http://rb-t510/NGCInstancing/Service1.svc" 
      binding="wsHttpBinding" bindingConfiguration="After" contract="NGCInstance.IService1" 
      name="After" /> 
     <endpoint address="http://rb-t510/NGCInstancing/Service1.svc" 
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1" 
      contract="NGC.IService1" name="WSHttpBinding_IService1"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 
    </client> 
</system.serviceModel> 

Il problema è che voglio aggiungere un altro endpoint che eseguirà la stessa funzionalità ma con un comportamento diverso. Per fare ciò, penso che avrò bisogno di passare una stringa di enpointConfigurationName al costruttore nella riga = new NGC.Service1Client. Non so quale stringa devo passare - mi sarei aspettato che fosse il nome di configurazione dell'endpoint "After.ConfigName" ma ho provato questo e ho ricevuto il seguente messaggio di errore:

Impossibile trovare l'elemento endpoint con nome 'After.ConfigName' e contratto 'NGC.IService1' nella sezione di configurazione del client ServiceModel. Ciò potrebbe essere dovuto al fatto che non è stato trovato alcun file di configurazione per l'applicazione o perché non è stato trovato alcun elemento endpoint che corrisponda a questo nome nell'elemento client.

Qualcuno può aiutare per favore?

risposta

22

Si dovrebbe passare il valore dell'attributo name dell'endpoint client corrispondente che si desidera utilizzare. Ad esempio se si desidera utilizzare il terzo endpoint:

new NGC.Service1Client("WSHttpBinding_IService1") 
+0

Questo è tutto, grazie. –

Problemi correlati