Claudio Masieri

SOA, Windows Communication Foundation (WCF), ASP.NET e le Architetture Distribuite

WCF e WS Discovery

Sto per pubblicare una versione del ws-discovery nuova di zecca su codeproject, ovviamente corredandola con un articolo.

Sono a buon punto con la traduzione, mentre per quel che riguarda l'implementazione:

- il servizio diventa 'scopribile' a runtime via configurazione:

    <extensions>
      <behaviorExtensions>
        <add name="serviceDiscoverableBehavior" type="Masieri.ServiceModel.WSDiscovery.Behaviors.DiscoveryBehaviorSection, Masieri.ServiceModel.WSDiscovery, Version=1.0.0.0, Culture=neutral, PublicKeyToken=18ad931e67d285bd" />
      </behaviorExtensions>
    </extensions>
    <services>
      <service  behaviorConfiguration="serviceDiscoverable" name="ServiceTest.Istanza">
        ...
       </service>
    </services> 

 e il behavior

     <behavior name="serviceDiscoverable">
          <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/Mex" />
          <serviceDiscoverableBehavior scopesMatchBy="http://schemas.xmlsoap.org/ws/2005/04/discovery/rfc2396">
            <scopes>
              <add url="http://myscope.tempuri.org/"/>
            </scopes>
          </serviceDiscoverableBehavior>
        </behavior>
      </serviceBehaviors>
 

- Ha i log nel formato classico del Service Model.

<system.diagnostics>
    <sources>
      <source name="System.ServiceModel.WSDiscovery" switchValue="Warning, Error">
        <listeners>
          <add initializeData="InfoServiceDebug.e2e"
          type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
     name="ServiceModel Listener"
          traceOutputOptions="LogicalOperationStack,  DateTime, Timestamp, ProcessId, ThreadId, Callstack" />
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging"  switchValue="Warning, Error" >
        <listeners>
          <clear />
          <add type="System.Diagnostics.DefaultTraceListener" name="Default"
                        traceOutputOptions="None" />
          <add initializeData="MessageLog.e2e"
        type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
        name="MessageLogging Listener"
        traceOutputOptions="LogicalOperationStack, DateTime, Timestamp, ProcessId, ThreadId, Callstack" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add type="System.Diagnostics.DefaultTraceListener"
            name="Default" />
    </sharedListeners>
  </system.diagnostics>

- Il client è implementato con la sola interfaccia senza dover far ereditare una classe DiscoveryClient<IServiceSample>()

- Ha la funzionalità di fault tollerance a livello di chiamata per scalare su altri servizi compatibili, ossia quando esistono piu servizi con la stessa interfaccia  se la chiamata su un servizio fallisce, il client ripete automaticamente la chiamata sull'altro

 
- funziona solo senza il discovery proxy. La parte di discovery proxy l'implementerò in futuro

Spero al più presto di averlo on line