2011-09-22 9 views
17

Ho scritto un asmx webSerivce su srv1. Ho scritto un progetto di bll di un progetto asp.net (testo originale: asp.net) su srv2. Entrambi sono ospitati sotto lo stesso dominio webchiamando asmx dal lato server C#: l'elemento endpoint che corrisponde a questo contratto può essere trovato nell'elemento client

voglio chiamare l'ASMX dal progetto BLL del asp.net (testo originale: asp.net (C#) codice dietro).

1) Ho aggiunto un riferimento Web, ma non ho trovato alcun tutorial su come chiamare realmente il servizio di riferimento.

ho provato:

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

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

ma il seguente errore durante l'esecuzione della prima linea: Impossibile trovare elemento endpoint predefinito che fa riferimento a contratto 'ServiceReference.GetTemplateParamSoap' nella sezione di configurazione del client ServiceModel. Ciò potrebbe essere dovuto al fatto che non è stato trovato alcun file di configurazione per l'applicazione o perché non è stato trovato alcun elemento endpoint che corrisponda a questo contratto nell'elemento client.

Cosa mi manca?

2) I piano per la migrazione di asp.net proj e asmx insieme da un dominio all'altro. C'è un modo per fare riferimento a questo webservice relativamente?

risposta

36

OK, vorrei provare a riformulare lo scenario per assicurarsi che ho capito bene:

  1. Hai servizio web ASMX ospitato su qualche dominio.
  2. Si dispone di un'applicazione ASP.NET ospitata sullo stesso o su un dominio diverso (non importa) da cui si desidera utilizzare questo servizio Web ASMX utilizzando un client WCF (svcutil).

Il primo passo è quello di aggiungere un servizio di riferimento per l'applicazione ASP.NET indicando il WSDL del servizio ASMX:

enter image description here

Questo farà 2 cose:

  • Aggiungerà un ServiceReference alla tua applicazione web

enter image description here

  • Si modificherà il tuo web.config e includere i endpoint client:

    <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> 
    

Ora, quando si vuole invocare questo servizio dalla vostra applicazione si dovrà scegliere il punto finale si desidera utilizzare:

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

Ora basta sostituire i frammenti di codice con il servizio effettivo n Ames.

+0

Il mio male, ho bisogno di chiamare questo asmx dal progetto bll (progetto di libreria), quindi ho bisogno di aggiungere manualmente gli elementi a web.config? –

+2

@Elad Benda, sì, è necessario un endpoint client nel web.config dell'applicazione ASP.NET che utilizza questa libreria. Si potrebbe anche configurare l'endpoint in modo programmatico nella BLL, ma è meglio avere una sezione di configurazione in quanto ti permetterà di cambiare più facilmente impostazioni come url, binding, ... –

+0

Sono stupito dalla tua risposta dettagliata. grazie mille ! Posso chiedere su quale sito hai ospitato le tue immagini? –

Problemi correlati