Procedimiento para usar el moniker de servicio de Windows Communication Foundation sin registrarse
Para conectarse y comunicarse con un servicio de la aplicación Windows Communication Foundation (WCF), una aplicación cliente de WCF debe disponer de los detalles de la dirección de servicio, la configuración del enlace y el contrato de servicio.
Normalmente, el moniker del servicio WCF obtiene el contrato necesario a través del registro previo a los tipos de atributo requeridos, aunque podría haber casos en los que esto no es posible. En lugar del registro, el moniker puede obtener la definición del contrato en forma de documento de lenguaje de descripción de servicios Web (WSDL), mediante el uso del parámetro wsdl
o a través de Metadatos Exchange, utilizando el parámetro mexAddress
.
Esto habilita escenarios como la distribución de una hoja de cálculo de Excel en la que algunos de los valores de celda se calculan mediante las interacciones del servicio Web. En este escenario, puede no ser posible registrar el ensamblado de contrato de servicios en todos los clientes que podrían abrir el documento. El parámetro wsdl
o el parámetro mexAddress
habilitan una solución autónoma.
Nota
La autenticación mutua debe utilizarse como protección frente a la manipulación o suplantación de solicitudes o respuestas. Más concretamente, es importante para los clientes estar seguros de que el punto de conexión del intercambio de metadatos es la parte de confianza interesada.
Ejemplo
Este ejemplo muestra el uso del moniker de servicio con un contrato MEX (Metadata Exchange). Un servicio con el siguiente contrato se expone con wsHttpBinding.
using System.ServiceModel;
// ...
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Demo")]
public interface IAffiliate
{
[OperationContract]
bool NewAffiliate(string ID, string company, string fullname, string accountsCode);
[OperationContract]
bool RemoveAffiliate(string ID);
[OperationContract]
double RevenueCheckMonthly(ref string ID);
[OperationContract]
double RevenueCheckTotal(ref string ID);
}
Si desea construir un cliente WCF para el servicio remoto puede utilizar la cadena de moniker del ejemplo siguiente.
service4:mexAddress="http://servername/Affiliates/service.svc/mex",
address="http://servername/Affiliates/service.svc",
contract=IAffiliate, contractNamespace=http://Microsoft.ServiceModel.Demo,
binding=WSHttpBinding_IAffiliate, bindingNamespace=http://tempuri.org/
Durante la ejecución de la aplicación cliente, el cliente realiza WS-MetadataExchange
con la mexAddress
proporcionada. Esto podría devolver los detalles de la dirección, el enlace y el contrato de varios servicios. Los parámetros address
, contract
, contractNamespace
, binding
y bindingNamespace
se utilizan para identificar el servicio deseado. Una vez identificadas las coincidencias de esos parámetros, el moniker construye un cliente WCF con la definición del contrato adecuada y, a continuación, pueden realizarse las llamadas utilizando el cliente WCF, como con el contrato con tipos.
Nota
Si el moniker es incorrecto o el servicio no está disponible, la llamada a GetObject
devuelve un error informando de que la sintaxis no es válida. Si recibe este error, asegúrese de que el moniker que está utilizando es correcto y el servicio está disponible.