Я пытаюсь подключить приложение (клиент) к открытой службе WCF, но не через файл конфигурации приложения, а в коде.Как программно подключить клиента к службе WCF?
Как мне это сделать?
Я пытаюсь подключить приложение (клиент) к открытой службе WCF, но не через файл конфигурации приложения, а в коде.Как программно подключить клиента к службе WCF?
Как мне это сделать?
Вам необходимо использовать класс ChannelFactory.
Вот пример:
var myBinding = new BasicHttpBinding();
var myEndpoint = new EndpointAddress("http://localhost/myservice");
var myChannelFactory = new ChannelFactory<IMyService>(myBinding, myEndpoint);
IMyService client = null;
try
{
client = myChannelFactory.CreateChannel();
client.MyServiceOperation();
((ICommunicationObject)client).Close();
}
catch
{
if (client != null)
{
((ICommunicationObject)client).Abort();
}
}
Близкие по теме ресурсы:
Отлично, спасибо. В качестве дополнения, вот как получить объект IMyService для использования в вашем приложении: http://msdn.microsoft.com/en-us/library/ms733133.aspx – Andrei
Вы должны использовать 'client' для' IClientClient' в чтобы закрыть его, хотя. – Dyppl
В моем примере я предполагаю, что интерфейс IMyService наследуется от [System.ServiceModel.ICommunicationObject] (http://msdn.microsoft.com/en-us/library/system.servicemodel.icommunicationobject.aspx). Я изменил образец кода, чтобы сделать это более понятным. –
Вы также можете сделать то, что "Service Reference" сгенерированный код делает
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);
}
}
Где IServiceX ваш WCF Соглашение о предоставлении услуг
Тогда ваш код клиента:
var client = new ServiceXClient(new WSHttpBinding(SecurityMode.None), new EndpointAddress("http://localhost:911"));
client.ServiceXWork("data param", "otherParam param");
Для тех, кто в поисках этого вверх, посмотрите на этот ответ: http://stackoverflow.com/a/839941/592732 – MarioVW