Cambios en el código después de ajustar extremos de servicios web a archivos WSDL
Actualización: noviembre 2007
Después de ajustar un punto final de servicios web implementado a un archivo de Lenguaje de descripción de servicios web (WSDL), podría haber cambios en los siguientes archivos de código asociados al punto final:
El archivo que implementa la clase de servicio web.
Esta clase contiene firmas de operación y cualquier código del cuerpo del método. Una operación es un método de clase con el atributo WebMethod y otros atributos relacionados.
Nota: No se producen cambios en el código del cuerpo del método cuando se ajusta un punto final implementado. Sin embargo, los cambios descritos en este tema podrían hacer que el código del cuerpo del método ya no se compile. Por consiguiente, revise el código e identifique los posibles cambios necesarios para corregir cualquier error del compilador.
Uno o varios archivos de clase que contienen definiciones de tipos personalizados.
Los cambios podrían ser, entre otros:
Adding new operation signatures
Updating operation signatures
Removing WebMethod attributes from operation signatures
Updating operation attributes
Adding or renaming custom type definitions
Conforming only the first matching operations
Adding comments about changes to code files
La ventana Detalles del servicio web también reflejará los cambios pertinentes. Las secciones siguientes contienen más información sobre estos cambios.
Agregar nuevas firmas de operación
Si el archivo WSDL describe una operación nueva, Visual Studio agrega la firma y los atributos de esa operación a la clase de servicio web. Para identificar la firma de esta nueva operación, busque el atributo WebMethod.
Nota: |
---|
Los métodos de clase sin el atributo WebMethod son métodos no web, no son operaciones. Estos métodos no se incluyen al comparar las operaciones. Para obtener más información, vea Updating Operation Signatures. |
El parámetro MessageName de la nueva operación coincidirá con el nombre de la operación en el archivo WSDL. Puede encontrar el parámetro MessageName en el atributo WebMethod de la firma de la operación.
Nota: |
---|
La nueva operación podría tener el mismo nombre que un miembro de clase existente (sin incluir los métodos no web). En este caso, Visual Studio agrega un número ordinal al nombre del método de la nueva operación, convirtiéndolo en un nombre único. |
Por ejemplo, supongamos que la clase de servicio web contiene un miembro denominado "newCatalog". Si el archivo WSDL describe una operación denominada "newCatalog", el nombre de método de la operación aparece como "newCatalog2" en esa clase. En las líneas siguientes se muestra el resultado del ajuste a este archivo WSDL:
[Visual Basic]
Public newCatalog As String
'''<remarks> [UserName::Date] This Web method was added after conforming this service to the WSDL file. </remarks>
<System.Web.Services.WebMethod(MessageName="newCatalog")> _
<System.Web.Services.Protocols.SoapDocumentMethod(Binding:="MyWebService")> _
Public Sub getCatalog2()
...
End Sub
[Visual C#]
public string newCatalog;
/// <remarks> [UserName::Date] This Web method was added after conforming this service to the WSDL file. </remarks>
[System.Web.Services.WebMethod(MessageName="newCatalog"), System.Web.Services.Protocols.SoapDocumentMethod(Binding = "MyWebService")]
public string newCatalog2()
{...}
Actualizar firmas de operación
Si el archivo WSDL describe una operación que coincide con una operación en la clase de servicio web, Visual Studio actualiza la firma y los atributos de la operación en la clase. En la siguiente lista se describen los criterios utilizados para hacer coincidir las operaciones entre la clase de servicio web y el archivo WSDL. En los ejemplos que muestran estos criterios se compara el código de clase con una operación WSDL denominada "getCatalog" (con el mismo nombre de mensaje):
Una operación de clase "coincide" si tiene el mismo nombre de mensaje pero no el mismo nombre de método que la operación WSDL.
Nota: El atributo MessageName identifica el nombre de mensaje de la operación.
Por ejemplo, la operación de clase siguiente coincide con la operación WSDL "getCatalog":
[System.Web.Services.WebMethod(MessageName = "getCatalog")] public void getNewCatalog()
Una operación de clase "coincide" si no tiene nombre de mensaje pero sí tiene el mismo nombre de método que la operación WSDL.
Por ejemplo, la operación de clase siguiente coincide con la operación WSDL "getCatalog":
[System.Web.Services.WebMethod()] public void getCatalog()
Una operación de clase no "coincide" si tiene el mismo nombre de método pero un nombre de mensaje diferente que la operación WSDL.
Por ejemplo, la operación de clase siguiente no coincide con la operación WSDL "getCatalog":
[System.Web.Services.WebMethod(MessageName = "getGolfCatalog")] public void getCatalog()
Un método de clase no se considera una operación si tiene el mismo nombre de método pero no tiene un atributo WebMethod. Este método no sufre modificaciones. En su lugar, se agregan a la clase una nueva firma de operación y los atributos correspondientes.
Por ejemplo, el método de clase siguiente no coincide con la operación WSDL "getCatalog" porque no tiene un atributo WebMethod y no sufre modificaciones:
public void getCatalog()
Quitar atributos WebMethod de firmas de operación
Si la clase de servicio web implementa una operación no descrita en el archivo WSDL, Visual Studio quita el atributo WebMethod y otros atributos correspondientes de esa operación de la clase. La operación cambia a un método no web.
Por ejemplo, en las líneas siguientes se muestra una operación con su atributo WebMethod y otros atributos correspondientes antes de que se ajuste a un archivo WSDL:
[Visual Basic]
<System.Web.Services.WebMethod()> _
<System.Web.Services.Protocols.SoapDocumentMethod(Binding:="myWebService")> _
Public Sub getCatalog()
...
End Sub
[Visual C#]
[System.Web.Services.WebMethod(), System.Web.Services.Protocols.SoapDocumentMethod(Binding = "myWebService")]
public void getCatalog()
{...}
En las líneas siguientes se muestra cómo la operación pierde el atributo WebMethod y otros atributos después de que se ajuste a un archivo WSDL que ya no describe esta operación. La operación se convierte en un método no web:
[Visual Basic]
''' <remarks>[UserName::Date] The WebMethod attribute was removed after conforming this service to the WSDL file. This operation does not exist under the corresponding port type in the WSDL file. </remarks>
Public Sub getCatalog()
...
End Sub
[Visual C#]
/// <remarks>[UserName::Date] The WebMethod attribute was removed after conforming this service to the WSDL file. This operation does not exist under the corresponding port type in the WSDL file. </remarks>
public void getCatalog()
{...}
Actualizar atributos de servicio web y de operación
Si los atributos de la clase de servicio web o de operaciones no coinciden con el archivo WSDL, Visual Studio los actualiza en la clase. Por ejemplo:
Se podrían actualizar el nombre y el espacio de nombres del servicio web.
Si el nombre y el espacio de nombres del servicio en la clase no son iguales que los que figuran en el archivo WSDL, Visual Studio los actualiza. Visual Studio actualiza estos valores en la clase como parte del atributo WebServiceBinding.
Se actualizan los nombres de enlace de todas las operaciones.
Si el nombre de enlace de cada operación en la clase no es igual al que figura en el archivo WSDL, Visual Studio lo actualiza. Actualiza este valor en la clase como parte del atributo SoapDocumentMethod de cada operación.
La lista siguiente contiene otros atributos que se podrían actualizar:
WebMethod
WebService
SoapDocumentService
SoapRpcMethod
SoapRpcService
No se cambiarán los atributos agregados por el usuario.
Agregar o cambiar el nombre de las definiciones de tipos personalizados
Las firmas de operación agregadas desde un archivo WSDL podrían hacer referencia a tipos personalizados. Una vez implementada la aplicación asociada, en la solución podrían aparecer uno o varios archivos de clase. Estos archivos contienen las definiciones de tipos correspondientes. Sus nombres de archivo tienen el formato siguiente:
"<nombreDeServicio><nombreDeTipoPersonalizado>.<extensiónDeArchivo>"
Nota: |
---|
La extensión de archivo depende del lenguaje de implementación. |
En estos archivos, los espacios de nombres que contienen estas definiciones de tipos tienen el formato siguiente:
Namespace <DefaultNamespace>.<ServiceName>CustomTypes
Por ejemplo, supongamos que un archivo WSDL describe un servicio denominado "MyService". Este servicio proporciona una operación que hace referencia a un tipo personalizado denominado "MyCustomType".
Cuando se ajusta un punto final de servicios web a este archivo WSDL, la firma de la operación que se acaba de agregar también hace referencia a este tipo personalizado. El nombre del archivo de tipo es "MyServiceMyCustomType.vb" o "MyServiceMyCustomType.cs", según si la aplicación asociada se implementó en Visual Basic o Visual C#. En este archivo de tipo, el espacio de nombres y la definición de tipo aparecen de la siguiente manera:
[Visual Basic]
Namespace ApplicationName.MyServiceCustomTypes
Public Class MyCustomType
...
End Class
End Namespace
[Visual C#]
namespace ApplicationName.MyServiceCustomTypes
{
public class MyCustomType
{...}
}
Cuando se ajusta un punto final de servicios web a un archivo WSDL, se producen diferentes cambios en estos archivos según las condiciones siguientes:
Los nombres de servicio son los mismos; sin embargo, ninguna definición de tipo existente tiene el mismo nombre que los tipos descritos en el archivo WSDL.
En este caso, los nuevos archivos de tipo se agregan a la solución. Estos archivos contienen las definiciones de los nuevos tipos descritos en el archivo WSDL. Estas definiciones aparecen en los espacios de nombres con el nombre de servicio.
Los nombres de servicio son los mismos; sin embargo, una o varias definiciones de tipo tienen el mismo nombre que los tipos descritos en el archivo WSDL.
En este caso, Visual Studio cambia el nombre de la definición de tipo existente anexando el texto "_Obsolete" al nombre de tipo. Visual Studio agrega la nueva definición de tipo al mismo archivo de tipo y espacio de nombres que el tipo que provocaba el conflicto. Después, las operaciones de este servicio web harán referencia al nuevo tipo en lugar del tipo que provocaba el conflicto.
Nota: Si el espacio de nombres ya contiene un tipo al que se ha cambiado el nombre con la cadena "_Obsolete", Visual Studio anexa un ordinal a esta cadena para generar un nombre único.
Por ejemplo, supongamos que el archivo de tipo contiene un tipo denominado "myCustomType". Visual Studio cambia el nombre a "myCustomType_Obsolete" si el archivo WSDL también describe un tipo con el mismo nombre. A continuación, Visual Studio agrega la definición de tipo al archivo de tipo.
Si el archivo de tipo contiene "myCustomType_Obsolete" y "myCustomType", Visual Studio cambia el nombre "myCustomType" a "myCustomType_Obsolete2". Visual Studio agrega la definición de tipo al archivo de tipo.
Los nombres de servicio difieren.
En este caso, Visual Studio no modifica ninguno de los archivos de tipo existentes. En su lugar, Visual Studio agrega nuevos archivos de tipo con el nuevo nombre de servicio a la solución. Estos archivos contienen las definiciones de los tipos descritos en el archivo WSDL. Estas definiciones aparecen en los espacios de nombres que utilizan el nuevo nombre de servicio.
Nota: La clase de servicio web también se actualizará con el nuevo nombre de servicio.
Para obtener más información sobre tipos personalizados, vea Puntos finales de servicios web basados en archivos WSDL.
Ajustar sólo las primeras operaciones coincidentes
Una clase de servicio web podría implementar varias operaciones que coinciden con una operación descrita en el archivo WSDL. En este caso, sólo se ajustará la primera firma de operación coincidente al archivo WSDL. Las demás firmas de operación coincidentes no cambiarán.
Para corregir esta situación, confirme que se ajustó la firma de operación correcta. Si fuera necesario, modifique las demás operaciones coincidentes para evitar duplicados en el futuro.
Agregar comentarios acerca de los cambios a los archivos de código
Visual Studio también agregará a los archivos de código comentarios generales que describen los cambios. Estos comentarios incluyen la fecha y el nombre del usuario que realizó los cambios.
Vea también
Tareas
Cómo: Ajustar puntos finales de servicios web a archivos WSDL