Ich versuche, eine Anwendung (den Client) mit einem exponierten WCF-Dienst zu verbinden, jedoch nicht über die Anwendungskonfigurationsdatei, sondern im Code.
Wie soll ich das machen?
c#
wcf
wcf-binding
wcf-client
Andrei
quelle
quelle
Antworten:
Sie müssen die ChannelFactory- Klasse verwenden.
Hier ist ein Beispiel:
var myBinding = new BasicHttpBinding(); var myEndpoint = new EndpointAddress("http://localhost/myservice"); using (var myChannelFactory = new ChannelFactory<IMyService>(myBinding, myEndpoint)) { IMyService client = null; try { client = myChannelFactory.CreateChannel(); client.MyServiceOperation(); ((ICommunicationObject)client).Close(); myChannelFactory.Close(); } catch { (client as ICommunicationObject)?.Abort(); } }
Ähnliche Resourcen:
quelle
client
,IClientClient
um es zu schließen.IMyService
Schnittstelle von System.ServiceModel.ICommunicationObject erbt . Ich habe den Beispielcode geändert, um dies klarer zu machen.Sie können auch das tun, was der generierte Code "Service Reference" tut
public class ServiceXClient : ClientBase<IServiceX>, IServiceX { public ServiceXClient() { } public ServiceXClient(string endpointConfigurationName) : base(endpointConfigurationName) { } public ServiceXClient(string endpointConfigurationName, string remoteAddress) : base(endpointConfigurationName, remoteAddress) { } public ServiceXClient(string endpointConfigurationName, EndpointAddress remoteAddress) : base(endpointConfigurationName, remoteAddress) { } public ServiceXClient(Binding binding, EndpointAddress remoteAddress) : base(binding, remoteAddress) { } public bool ServiceXWork(string data, string otherParam) { return base.Channel.ServiceXWork(data, otherParam); } }
Wobei IServiceX Ihr WCF-Servicevertrag ist
Dann Ihr Kundencode:
var client = new ServiceXClient(new WSHttpBinding(SecurityMode.None), new EndpointAddress("http://localhost:911")); client.ServiceXWork("data param", "otherParam param");
quelle