Come costruire un WebServices con WCF che vada d’accordo con WebSphere

In WCF esporre un WebService è molto semplice ma utilizzarlo da WAS (Websphere Application Server) un po’ meno. Mentre AXIS 1.4 è molto più di bocca buona, il generatore del RAD/AST sembra mal digerire i namespace tempuri.org e altri piccoli particolari. Questo articolo descrive cosa occorre fare per creare un WebService perfettamente consumabile da RAD/AST (6.1).

Per prima cosa in .NET si definisce una interfaccia e la si decora con i soliti attributi ServiceContract, DataContract, OperationContract. E importante notare che la gestione di campi XML in maiuscolo non è ben supportata dal generatore Java e pertanto conviene creare DataContract con campi con iniziali in minuscolo. In alternativa si possono sfruttare gli attributi di generazione XML sui DataContract

[DataContract(
	Name="DatiServizio",
	Namespace="<http://example.com/esempio>")];
public class DatiServizio
{
	[DataMember]
	[XmlElement(Name="testo")]
	public string Testo { set; get; }
	[DataMember]
	[XmlElement(Name="numero")]
	public decimal Numero { set; get; }
} 

[ServiceContract(
	Name="DatiServizio",
	Namespace="<http://example.com/esempio>")];
public interface IServizio
{
	[OperationContract]
	string FaiQualcosa(DatiServizio dati);
}

Nella implementazione della interfaccia si utilizza l’attributo ServiceBehaviour per
fornire altre informazioni sui namespace:

[ServiceBehavior(
	Name="Servizio",
	Namespace="http://example.com/esempio")]
class ServizioType : IServizio
{
	// codice omesso...
}

A questo punto è necessario creare un corretto file di configurazione app.config. In particolare nella sezione dedicata al WCF si inseriscono queste informazioni:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service behaviorConfiguration="Servizio" name="ServizioType">
        <endpoint
           address="Servizio"
           binding="basicHttpBinding"
           bindingConfiguration="ServizioBinding"
           name="ServizioEndpoint"
           bindingName="Servizio"
           bindingNamespace="http://example.com/esempio"
           contract="IServizio" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/Servizio" />
          </baseAddresses>
        </host>
      </service>
    </services>

    <bindings>
      <basicHttpBinding>
        <binding name="ServizioBinding" />
      </basicHttpBinding>
    </bindings>

    <behaviors>
      <serviceBehaviors>
        <behavior name="Servizio">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Con queste configurazioni tutti i namespace risultano a posto e il WSDL generato automaticamente (http://localhost:8000/Servizio?wsdl) è in grado di essere mangiato direttamente dal generatore WSDL del RAD/AST.

Una Risposta a “Come costruire un WebServices con WCF che vada d’accordo con WebSphere”

  1. Come costruire un WebServices con WCF che vada d’accordo con WebSphere « In Vista Dice:

    [...] e SOA dal punto di vista pratico) ho pubblicato un post che indica in modo molto semplice come come costruire un WebServices con WCF che vada d’accordo con WebSphere. Posted by Max Filed in Development, SOA, [...]

Lascia un commento