web-dev-qa-db-fra.com

appel asmx du côté serveur c #: l'élément de point de terminaison correspondant à ce contrat peut être trouvé dans l'élément client

J'ai écrit un webSerivce asmx sur srv1. J'ai écrit un projet bll d'un asp.net (texte original: un asp.net) sur srv2. Les deux sont hébergés sous le même domaine Web

Je veux appeler l'asmx depuis le projet bll de asp.net (texte original: code asp.net (c #) derrière).

1) J'ai ajouté une référence Web, mais je n'ai trouvé aucun didacticiel sur la façon d'appeler réellement le service référencé.

J'ai essayé:

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

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

mais obtenez l'erreur suivante lors de l'exécution de la première ligne: Impossible de trouver l'élément de point de terminaison par défaut qui fait référence au contrat 'ServiceReference.GetTemplateParamSoap' dans la section de configuration du client ServiceModel. Cela peut être dû au fait qu'aucun fichier de configuration n'a été trouvé pour votre application, ou car aucun élément de noeud final correspondant à ce contrat n'a pu être trouvé dans l'élément client.

Qu'est-ce que je rate?

2) Je prévois de migrer le projet asp.net et asmx ensemble d'un domaine à un autre. Existe-t-il un moyen de référencer ce webservice relativement?

20
Elad Benda

OK, laissez-moi essayer de reformuler votre scénario pour vous assurer que je l'ai bien compris:

  1. Vous disposez d'un service Web ASMX hébergé sur un domaine.
  2. Vous avez une application ASP.NET hébergée sur le même domaine ou sur un domaine différent (cela n'a pas vraiment d'importance) à partir duquel vous souhaitez utiliser ce service Web ASMX à l'aide d'un client WCF (svcutil).

La première étape consiste à ajouter une référence de service à l'application ASP.NET en pointant sur le WSDL du service ASMX:

enter image description here

Cela fera 2 choses:

  • Il ajoutera un ServiceReference à votre application Web

enter image description here

  • Il modifiera votre web.config et inclura les points de terminaison 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>
    

Maintenant, lorsque vous souhaitez appeler ce service à partir de votre application, vous devrez choisir le point de terminaison que vous souhaitez utiliser:

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

Maintenant, remplacez simplement mes extraits de code par vos noms de service réels.

40
Darin Dimitrov