webentwicklung-frage-antwort-db.com.de

Ist es möglich, auf den WCF-Service zuzugreifen, ohne eine Servicereferenz hinzuzufügen?

Ich muss auf Wcf-Servicemethoden zugreifen, ohne Service Reference hinzuzufügen. Wie kann ich das tun?

Schritt 1: Ich erstelle einen WCF-Dienst.
Schritt 2: Hinzufügen einer Servicereferenz zu meiner Anwendung.
Schritt 3: Zugriff auf die WCF-Dienstmethoden in der App. 

wie auf diese Weise

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

Sie können wie folgt verwenden. Fügen Sie einfach die Referenz des Servicevertrags hinzu.

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");

Von hier können Sie diesbezüglich voll trainieren.

21
Thilina H

Ja, es ist möglich, als WCF-Dienst aufzurufen, ohne eine Dienstreferenz hinzuzufügen.

Als ersten Schritt gehe ich davon aus, dass Sie Ihre Servicekontakt-Schnittstelle als separate Klassenbibliothek haben.

Schritt 2: Erstellen Sie Ihren WCF-Dienst und hosten Sie ihn in IIS

Schritt 3: Verweisen Sie auf Ihre Servicevertragsbibliothek in der Clientanwendung und befolgen Sie dann diesen 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);

Hoffe das hilft

3
wizzardz

Den Abschlag lynchen Mob damit riskieren, aber ...

Wenn es sich bei reason nicht um den Verweis handelt, weil Sie die URL zur Laufzeit auswählen müssen, können Sie den Verweis noch hinzufügen und ihn bei Bedarf ändern:

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

(oder machen Sie dasselbe im Konstruktor, wenn Sie instanziieren).

2
SteveCav

Ich habe keinen Ruf, die Antwort von "Thilina H" zu kommentieren, aber Sie können Code verwenden

ServiceContract channel = factory.CreateChannel();

nur wenn du geschrieben hast:

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

stattdessen

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

Wenn dies in John der Fall war: "Schritt 2: Hinzufügen eines Dienstverweises zu meiner Anwendung." Visual Studio fügte der App.config-Datei seiner Anwendung den Endpunkt und die Standardbindungen hinzu. Er muss keine URL angeben. Johns Code sollte einwandfrei funktionieren, solange der Dienst die erforderlichen Verträge umgesetzt hat.

0
Steve Wood