Tengo una aplicación que está llamando a un servicio SOAP existente que está escrito en J2EE y alojado en WebSphere.
He creado dos aplicaciones de consola, una que hace referencia al servicio como un servicio web de la vieja escuela y otra que lo hace referencia como una referencia de servicio.
En ambos casos, Visual Studio crea una clase de proxy y entradas de configuración apropiadas para el servicio.
En la aplicación de consola de referencia de servicio, obtengo muchas más opciones de configuración que no veo en la aplicación de servicio web. En particular, puedo establecer el tamaño máximo de mensaje, etc.
De hecho, para que la aplicación de consola de referencia de servicio funcione correctamente, tuve que aumentar el tamaño de mensaje predeterminado para recuperar todos los datos enviados en una de las llamadas al método.
Esto es lo que la configuración se ve como en la aplicación de servicio Referencia:
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="ClaimSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536000" maxBufferPoolSize="524288" maxReceivedMessageSize="65536000"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://urlgoeshere/ClaimService"
binding="basicHttpBinding" bindingConfiguration="ClaimSoapBinding"
contract="ClaimService.Claim" name="ClaimService" />
</client>
</system.serviceModel>
</configuration>
En mi escuela vieja aplicación de consola Web Service, yo no tenía que alterar la configuración del todo para volver el conjunto gigante de datos enviados de vuelta. Esto es lo que se ve su configuración como:
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ServiceTesterOldSchool.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<ServiceTesterOldSchool.Properties.Settings>
<setting name="ServiceTesterOldSchool_ClaimService_ClaimService"
serializeAs="String">
<value>http://urlgoeshere/ClaimService</value>
</setting>
</ServiceTesterOldSchool.Properties.Settings>
</applicationSettings>
</configuration>
Es mucho más simple, pero carece de muchas de las opciones que se obtiene con las referencias de servicio.
El código real que llama al servicio es casi idéntico en ambos casos.
Para responder a su pregunta, creo que es importante seguir con la forma actual de hacer las cosas. Microsoft deja esto en claro al obligarlo a pasar por un par de niveles de diálogos antes de que pueda agregar una referencia web de la vieja escuela (al menos en VS2008).
Creo que la forma de WCF es más flexible, y la configuración es mucho más descriptiva sobre lo que está sucediendo.
Además, a medida que agrega nuevos componentes WCF a sus aplicaciones, será bueno mantener la configuración constante, en lugar de mezclar y combinar entre la vieja escuela y WCF.
Gracias por los enlaces Marc! Siempre buscando más información. :) –
Esos 3 enlaces de pluralsight parecen estar rotos ... – fretje
@fretje: sí, lo siento, decidieron hacer que los screencasts en su propio sitio solo estuvieran disponibles para los suscriptores ... Trataré de encontrarlos nuevamente en el WCF Developer Center y actualizar los enlaces ... espere ..... –