Interfaz WSDL para soluciones de VDI personalizadas
Los desarrolladores pueden crear servicios web personalizados que administren soluciones de infraestructura de escritorio virtual (VDI).
A partir de Windows Server 2008 R2, los equipos cliente pueden comunicarse con los servicios web que realizan la administración de máquinas virtuales mediante el complemento de filtro VMMWebServerClient.dll. Puede implementar un servicio web personalizado que funcione con este complemento de filtro. Para comunicarse con el complemento de filtro, el servicio web debe implementar los métodos definidos en el siguiente archivo WSDL (lenguaje de definición de servicios web).
<wsdl:definitions xmlns:soap="https://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsu="https://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:soapenc="https://schemas.xmlsoap.org/soap/encoding/" xmlns:wsam="https://www.w3.org/2007/05/addressing/metadata" xmlns:tns="https://Microsoft.Virtualization.RDV" xmlns:wsa="https://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="https://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsap="https://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsaw="https://www.w3.org/2006/05/addressing/wsdl" xmlns:soap12="https://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="https://www.w3.org/2005/08/addressing" xmlns:wsx="https://schemas.xmlsoap.org/ws/2004/09/mex" targetNamespace="https://Microsoft.Virtualization.RDV" xmlns:wsdl="https://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<xsd:schema targetNamespace="https://Microsoft.Virtualization.RDV/Imports" xmlns:xs="https://www.w3.org/2001/XMLSchema">
<xsd:import namespace="https://Microsoft.Virtualization.RDV" />
<xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
<xsd:import namespace="https://schemas.datacontract.org/2004/07/Microsoft.Virtualization.RDV" />
<xs:element name="StartVM">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="type" xmlns:q1="https://schemas.datacontract.org/2004/07/Microsoft.Virtualization.RDV" type="q1:NameType" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="StartVMResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="StartVMResult" xmlns:q2="http://schemas.microsoft.com/2003/10/Serialization/" type="q2:guid" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetLocale">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="locale" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetLocaleResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="SetLocaleResult" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetVM">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="type" xmlns:q3="https://schemas.datacontract.org/2004/07/Microsoft.Virtualization.RDV" type="q3:NameType" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetVMResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="GetVMResult" nillable="true" xmlns:q4="https://schemas.datacontract.org/2004/07/Microsoft.Virtualization.RDV" type="q4:VMResult" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PlaceVM">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="type" xmlns:q5="https://schemas.datacontract.org/2004/07/Microsoft.Virtualization.RDV" type="q5:NameType" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PlaceVMResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="PlaceVMResult" xmlns:q6="http://schemas.microsoft.com/2003/10/Serialization/" type="q6:guid" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="JobUpdated">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="job" nillable="true" xmlns:q7="https://schemas.datacontract.org/2004/07/Microsoft.Virtualization.RDV" type="q7:Job" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="NameType">
<xs:restriction base="xs:string">
<xs:enumeration value="COMPUTER_NAME_FQDN" />
<xs:enumeration value="GUID" />
<xs:enumeration value="VM_NAME" />
</xs:restriction>
</xs:simpleType>
<xs:element name="NameType" nillable="true" type="tns:NameType" />
<xs:complexType name="VMResult">
<xs:sequence>
<xs:element minOccurs="0" name="DetailedErrorString" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="ErrorID" type="tns:VMError" />
<xs:element minOccurs="0" name="VMList" nillable="true" type="tns:ArrayOfVM" />
</xs:sequence>
</xs:complexType>
<xs:element name="VMResult" nillable="true" type="tns:VMResult" />
<xs:simpleType name="VMError">
<xs:restriction base="xs:string">
<xs:enumeration value="ERROR_VM_SUCCESS" />
<xs:enumeration value="ERROR_VM_START" />
<xs:enumeration value="ERROR_VM_PLACEMENT" />
<xs:enumeration value="ERROR_VM_SAVE" />
<xs:enumeration value="ERROR_VM_RESTORE" />
<xs:enumeration value="ERROR_VM_MISSING" />
<xs:enumeration value="ERROR_JOB_NOT_FOUND" />
<xs:enumeration value="ERROR_VM_LOCKED" />
<xs:enumeration value="ERROR_VM_NO_PERMISSION" />
<xs:enumeration value="ERROR_VM_STATE" />
<xs:enumeration value="ERROR_SERVER_CONNECTION_LOST" />
<xs:enumeration value="ERROR_SERVER_CONNECTION_SETUP" />
</xs:restriction>
</xs:simpleType>
<xs:element name="VMError" nillable="true" type="tns:VMError" />
<xs:complexType name="ArrayOfVM">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="VM" nillable="true" type="tns:VM" />
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfVM" nillable="true" type="tns:ArrayOfVM" />
<xs:complexType name="VM">
<xs:sequence>
<xs:element minOccurs="0" name="HostFQDN" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="HostType" type="tns:VMHostType" />
<xs:element minOccurs="0" name="ID" type="ser:guid" />
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Status" type="tns:VMStatus" />
</xs:sequence>
</xs:complexType>
<xs:element name="VM" nillable="true" type="tns:VM" />
<xs:simpleType name="VMHostType">
<xs:restriction base="xs:string">
<xs:enumeration value="VM_LIBRARY" />
<xs:enumeration value="VM_HOST" />
</xs:restriction>
</xs:simpleType>
<xs:element name="VMHostType" nillable="true" type="tns:VMHostType" />
<xs:simpleType name="VMStatus">
<xs:restriction base="xs:string">
<xs:enumeration value="VM_STATUS_UNKNOWN" />
<xs:enumeration value="VM_STATUS_MIGRATING" />
<xs:enumeration value="VM_STATUS_RUNNING" />
<xs:enumeration value="VM_STATUS_HIBERNATED" />
<xs:enumeration value="VM_STATUS_PAUSED" />
<xs:enumeration value="VM_STATUS_STOPPED" />
<xs:enumeration value="VM_STATUS_GUEST_BOOTED" />
<xs:enumeration value="VM_STATUS_GUEST_REBOOTED" />
<xs:enumeration value="VM_STATUS_GUEST_READY" />
</xs:restriction>
</xs:simpleType>
<xs:element name="VMStatus" nillable="true" type="tns:VMStatus" />
<xs:complexType name="Job">
<xs:sequence>
<xs:element minOccurs="0" name="DetailedErrorString" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="ErrorID" type="tns:VMError" />
<xs:element minOccurs="0" name="ID" type="ser:guid" />
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="Progress" type="xs:double" />
<xs:element minOccurs="0" name="Status" type="tns:JobStatus" />
<xs:element minOccurs="0" name="Step" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="Job" nillable="true" type="tns:Job" />
<xs:simpleType name="JobStatus">
<xs:restriction base="xs:string">
<xs:enumeration value="DOES_NOT_EXISTS" />
<xs:enumeration value="RUNNING" />
<xs:enumeration value="FAILED" />
<xs:enumeration value="COMPLETED" />
</xs:restriction>
</xs:simpleType>
<xs:element name="JobStatus" nillable="true" type="tns:JobStatus" />
</xsd:schema>
</wsdl:types>
<wsdl:message name="IRDVServer_StartVM_InputMessage">
<wsdl:part name="parameters" element="tns:StartVM" />
</wsdl:message>
<wsdl:message name="IRDVServer_StartVM_OutputMessage">
<wsdl:part name="parameters" element="tns:StartVMResponse" />
</wsdl:message>
<wsdl:message name="IRDVServer_SetLocale_InputMessage">
<wsdl:part name="parameters" element="tns:SetLocale" />
</wsdl:message>
<wsdl:message name="IRDVServer_SetLocale_OutputMessage">
<wsdl:part name="parameters" element="tns:SetLocaleResponse" />
</wsdl:message>
<wsdl:message name="IRDVServer_GetVM_InputMessage">
<wsdl:part name="parameters" element="tns:GetVM" />
</wsdl:message>
<wsdl:message name="IRDVServer_GetVM_OutputMessage">
<wsdl:part name="parameters" element="tns:GetVMResponse" />
</wsdl:message>
<wsdl:message name="IRDVServer_PlaceVM_InputMessage">
<wsdl:part name="parameters" element="tns:PlaceVM" />
</wsdl:message>
<wsdl:message name="IRDVServer_PlaceVM_OutputMessage">
<wsdl:part name="parameters" element="tns:PlaceVMResponse" />
</wsdl:message>
<wsdl:message name="IRDVServer_JobUpdated_OutputCallbackMessage">
<wsdl:part name="parameters" element="tns:JobUpdated" />
</wsdl:message>
<wsdl:portType msc:usingSession="true" name="IRDVServer">
<wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="StartVM">
<wsdl:input wsaw:Action="https://Microsoft.Virtualization.RDV/IRDVServer/StartVM" message="tns:IRDVServer_StartVM_InputMessage" />
<wsdl:output wsaw:Action="https://Microsoft.Virtualization.RDV/IRDVServer/StartVMResponse" message="tns:IRDVServer_StartVM_OutputMessage" />
</wsdl:operation>
<wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="SetLocale">
<wsdl:input wsaw:Action="https://Microsoft.Virtualization.RDV/IRDVServer/SetLocale" message="tns:IRDVServer_SetLocale_InputMessage" />
<wsdl:output wsaw:Action="https://Microsoft.Virtualization.RDV/IRDVServer/SetLocaleResponse" message="tns:IRDVServer_SetLocale_OutputMessage" />
</wsdl:operation>
<wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="GetVM">
<wsdl:input wsaw:Action="https://Microsoft.Virtualization.RDV/IRDVServer/GetVM" message="tns:IRDVServer_GetVM_InputMessage" />
<wsdl:output wsaw:Action="https://Microsoft.Virtualization.RDV/IRDVServer/GetVMResponse" message="tns:IRDVServer_GetVM_OutputMessage" />
</wsdl:operation>
<wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="PlaceVM">
<wsdl:input wsaw:Action="https://Microsoft.Virtualization.RDV/IRDVServer/PlaceVM" message="tns:IRDVServer_PlaceVM_InputMessage" />
<wsdl:output wsaw:Action="https://Microsoft.Virtualization.RDV/IRDVServer/PlaceVMResponse" message="tns:IRDVServer_PlaceVM_OutputMessage" />
</wsdl:operation>
<wsdl:operation msc:isInitiating="true" msc:isTerminating="false" name="JobUpdated">
<wsdl:output wsaw:Action="https://Microsoft.Virtualization.RDV/IRDVServer/JobUpdated" message="tns:IRDVServer_JobUpdated_OutputCallbackMessage" />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="DefaultBinding_IRDVServer" type="tns:IRDVServer">
<soap:binding transport="https://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="StartVM">
<soap:operation soapAction="https://Microsoft.Virtualization.RDV/IRDVServer/StartVM" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetLocale">
<soap:operation soapAction="https://Microsoft.Virtualization.RDV/IRDVServer/SetLocale" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetVM">
<soap:operation soapAction="https://Microsoft.Virtualization.RDV/IRDVServer/GetVM" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="PlaceVM">
<soap:operation soapAction="https://Microsoft.Virtualization.RDV/IRDVServer/PlaceVM" style="document" />
<wsdl:input>
<soap:body use="literal" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="JobUpdated">
<soap:operation soapAction="https://Microsoft.Virtualization.RDV/IRDVServer/JobUpdated" style="document" />
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>
Este archivo WSDL define los métodos siguientes:
GetVM
El complemento de filtro llama a este método para obtener información sobre una máquina virtual especificada. Debe devolver el estado, el nombre de host, el tipo de host y el GUID de la máquina virtual.
El complemento de filtro pasa el siguiente elemento al método .
<xs:element name="GetVM">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="type" xmlns:q3="https://schemas.datacontract.org/2004/07/Microsoft.Virtualization.RDV" type="q3:NameType" />
</xs:sequence>
</xs:complexType>
</xs:element>
El servicio web debe devolver el siguiente elemento al complemento de filtro.
<xs:element name="GetVMResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="GetVMResult" nillable="true" xmlns:q4="https://schemas.datacontract.org/2004/07/Microsoft.Virtualization.RDV" type="q4:VMResult" />
</xs:sequence>
</xs:complexType>
</xs:element>
JobUpdated
El servicio web llama a este método para notificar al complemento de filtro que se realizaron cambios en un trabajo existente. Cuando implemente este método, devuelva S_OK si la función se realiza correctamente. Si se produce un error, devuelve un valor HRESULT que indica el error. Para obtener una lista de códigos de error comunes, consulte Valores HRESULT comunes.
El servicio web pasa el siguiente elemento al complemento de filtro.
<xs:element name="JobUpdated">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="job" nillable="true" xmlns:q7="https://schemas.datacontract.org/2004/07/Microsoft.Virtualization.RDV" type="q7:Job" />
</xs:sequence>
</xs:complexType>
</xs:element>
PlaceVM
El complemento de filtro llama a este método para migrar una máquina virtual de una biblioteca a un equipo host. El método debe generar un trabajo y devolver un identificador de trabajo único al complemento de filtro con fines de seguimiento. Una vez completado el procesamiento, el servicio web debe llamar a JobUpdated.
El complemento de filtro pasa el siguiente elemento al método .
<xs:element name="PlaceVM">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="type" xmlns:q5="https://schemas.datacontract.org/2004/07/Microsoft.Virtualization.RDV" type="q5:NameType" />
</xs:sequence>
</xs:complexType>
</xs:element>
El servicio web debe devolver el siguiente elemento al complemento de filtro.
<xs:element name="PlaceVMResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="PlaceVMResult" xmlns:q6="http://schemas.microsoft.com/2003/10/Serialization/" type="q6:guid" />
</xs:sequence>
</xs:complexType>
</xs:element>
SetLocale
El complemento de filtro llama a este método para especificar la configuración regional que se usará para las cadenas de error.
El complemento de filtro pasa el siguiente elemento al método .
<xs:element name="SetLocale">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="locale" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
El servicio web debe devolver el siguiente elemento al complemento de filtro.
<xs:element name="SetLocaleResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="SetLocaleResult" nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
StartVM
El complemento de filtro llama a este método para iniciar la máquina virtual en el equipo host actual. Si la máquina virtual no se puede iniciar en el equipo host actual, este método debe migrar la máquina virtual al mejor host posible y, a continuación, iniciarla. El método debe generar un trabajo y devolver un identificador de trabajo único al complemento de filtro con fines de seguimiento. Una vez completado el procesamiento, el servicio web debe llamar a JobUpdated.
El complemento de filtro pasa el siguiente elemento al método .
<xs:element name="StartVM">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string" />
<xs:element minOccurs="0" name="type" xmlns:q1="https://schemas.datacontract.org/2004/07/Microsoft.Virtualization.RDV" type="q1:NameType" />
</xs:sequence>
</xs:complexType>
</xs:element>
El servicio web debe devolver el siguiente elemento al complemento de filtro.
<xs:element name="StartVMResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="StartVMResult" xmlns:q2="http://schemas.microsoft.com/2003/10/Serialization/" type="q2:guid" />
</xs:sequence>
</xs:complexType>
</xs:element>