2011-09-22 23 views
17

Escribí un webSerivce de asmx en srv1. Escribí un proyecto bll de un proyecto asp.net (texto original: un asp.net) en srv2. Ambos están alojados en el mismo dominio webllamando a asmx desde el lado del servidor C#: el elemento del punto final que coincide con este contrato se puede encontrar en el elemento del cliente

Quiero llamar la asmx del proyecto BLL del asp.net (texto original: asp.net (C#) código detrás).

1) Agregué una referencia web, pero no pude encontrar ningún tutorial sobre cómo llamar realmente al servicio al que se hace referencia.

que he intentado:

private void GetTemplateComponentsData() 
{ 
    var service = new ServiceReference.GetTemplateParamSoapClient(); 
    TemplateParamsKeyValue[] responsArray = service.GetTemplatesParamsPerId(id); 

    foreach (var pair in responsArray) 
    { 
     TemplateComponentsData.Add(pair.Key, pair.Value); 
    } 
} 

pero el siguiente error al ejecutar la primera línea: No se pudo encontrar el elemento extremo predeterminado que hace referencia a un contrato 'ServiceReference.GetTemplateParamSoap' en la sección de configuración del cliente de ServiceModel. Esto podría deberse a que no se encontró ningún archivo de configuración para su aplicación, o porque no se pudo encontrar ningún elemento de punto final que coincida con este contrato en el elemento del cliente.

¿Qué me falta?

2) vuelo para migrar asp.net proj y asmx juntos de un dominio a otro. ¿Hay alguna manera de hacer referencia a este servicio web de forma relativa?

Respuesta

36

OK, vamos a tratar de reformular el escenario para asegurarse de que lo hizo bien:

  1. Usted tiene un servicio web ASMX alojado en un dominio.
  2. Tiene una aplicación ASP.NET alojada en el mismo dominio o en otro diferente (en realidad no importa) desde el que desea consumir este servicio web ASMX utilizando un cliente WCF (svcutil).

El primer paso consiste en añadir una referencia de servicio a la aplicación ASP.NET señalando el WSDL del servicio ASMX:

enter image description here

Esto va a hacer 2 cosas:

  • Agregará una referencia de servicio a su aplicación web

enter image description here

  • Será modificar web.config e incluir los extremos de cliente:

    <client> 
        <endpoint address="http://ws.cdyne.com/NotifyWS/phonenotify.asmx" 
        binding="basicHttpBinding" bindingConfiguration="PhoneNotifySoap" 
        contract="ServiceReference1.PhoneNotifySoap" name="PhoneNotifySoap" /> 
        <endpoint address="http://ws.cdyne.com/NotifyWS/phonenotify.asmx" 
        binding="customBinding" bindingConfiguration="PhoneNotifySoap12" 
        contract="ServiceReference1.PhoneNotifySoap" name="PhoneNotifySoap12" /> 
    </client> 
    

Ahora, cuando se desea invocar este servicio desde su aplicación tendrá que elegir el punto final que desea utilizar:

using (var client = new ServiceReference1.PhoneNotifySoapClient("PhoneNotifySoap")) 
{ 
    var result = client.GetVersion(); 
} 

Ahora simplemente reemplace mis fragmentos de código con su servicio real n Ames.

+0

Malo, necesito llamar a este asmx desde el proyecto bll (proyecto de biblioteca), entonces necesito agregar manualmente los elementos al web.config? –

+2

@Elad Benda, sí necesita un extremo del cliente en el archivo web.config de la aplicación ASP.NET que utiliza esta biblioteca. También puede configurar el punto final mediante programación en el BLL, pero es mejor tener una sección de configuración, ya que le permitirá cambiar más fácilmente la configuración, como las URL, los enlaces, ... –

+0

Me sorprendió su respuesta detallada. gracias un montón ! ¿Puedo preguntar en qué sitio recibió sus imágenes? –

Cuestiones relacionadas