web-dev-qa-db-fra.com

Est-il possible d'accéder au service WCF sans ajouter de référence de service?

Je dois accéder aux méthodes de service Wcf sans ajouter de référence de service - comment procéder?

Étape 1: Je crée un service WCF.
Étape 2: Ajouter une référence de service à mon application.
Étape 3: et accédez aux méthodes du service WCF dans l'application. 

comme ça,

ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
protected void Button1_Click(object sender, EventArgs e)
{
    UserDetails userInfo = new UserDetails();
    userInfo.UserName = TextBoxUserName.Text;
    userInfo.Password = TextBoxPassword.Text;
    userInfo.Country = TextBoxCountry.Text;
    userInfo.Email = TextBoxEmail.Text;
    string result = obj.InsertUserDetails(userInfo);
    LabelMessage.Text = result;
}
18
User

Vous pouvez utiliser comme suit. Assurez-vous simplement d’ajouter la référence du contrat de service.

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://localhost:4684/Service1.svc");
ChannelFactory factory = new ChannelFactory<ServiceContract>(binding, address);
ServiceContract channel = factory.CreateChannel();
string resturnmessage = channel.YourMethod("test");

De ici vous pouvez obtenir une séance d’entraînement complète à ce sujet.

21
Thilina H

Oui, il est possible d'appeler en tant que service WCF sans ajouter de référence de service.

Dans un premier temps, je suppose que votre interface de contact de service est une bibliothèque de classes séparée.

Étape 2: Créez votre service WCF et hébergez-le dans IIS

Étape 3: référez-vous à votre bibliothèque de contrats de service dans l'application client, puis suivez ce code

ChannelFactory<IYourServiceContract> factory = new ChannelFactory<IYourServiceContract>("EndpointNameOfYourService");
factory.Endpoint.Address = new EndpointAddress("http://example.com/service");  

IYourServiceContract client = factory.CreateChannel();
var result = client.YourMethodtoInvoke(serviceArguments);

J'espère que cela t'aides

3
wizzardz

Risquer la foule de lynchage avec cela, mais ...

Si la raison vous n’ajoutez pas la référence, c’est que vous devez choisir l’URL au moment de l’exécution, vous pouvez toujours ajouter la référence, puis la modifier à tout moment avec:

MyProxy.Endpoint.Address = new EndpointAddress(MyUri);

(ou faites la même chose dans le constructeur lorsque vous instanciez).

2
SteveCav

Je n'ai pas la réputation de commenter la réponse de "Thilina H", mais vous pouvez utiliser du code

ServiceContract channel = factory.CreateChannel();

seulement si vous avez écrit:

var factory = new ChannelFactory<ServiceContract>(binding, address);

au lieu

ChannelFactoryfactory = new ChannelFactory<ServiceContract>(binding, address);
0
Leon Pro

Quand à John a fait ceci: "Étape 2: Ajouter une référence de service à mon application." Visual Studio a ajouté les liaisons de noeud final et par défaut au fichier app.config de son application. Il n'a pas besoin de spécifier une URL. Le code de John devrait fonctionner correctement tant que le service a mis en œuvre les contrats requis.

0
Steve Wood