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