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