Как показывает ошибка, вам не хватает TransportBindingElement.
Привязка состоит из BingingElement, пользовательская привязка без bingingelement не имеет смысла.
Если вы хотите использовать пользовательскую привязку, вы должны добавить в нее элемент binging.
BindingElement[] elements = new BindingElement[]
{
new TextMessageEncodingBindingElement(),
new HttpTransportBindingElement()
};
CustomBinding binding = new CustomBinding(elements);
using (ChannelFactory<ICalculatorService> channelFacoty = new ChannelFactory<ICalculatorService>(binding, new EndpointAddress("http://localhost:4000/calculator")))
{
ICalculatorService cal = channelFacoty.CreateChannel();
Console.WriteLine( cal.Add(1, 3));
Console.Read();
}
Но так как вы используете ws2007httpbing на стороне сервера, почему бы не использовать ws2007httpbinding напрямую на вашей стороне клиента. Используя ws2007httpbinging, вам не нужно добавлять в него элементы binging (они были добавлены).
Ниже приведено простое использование привязки ws2007http.
WS2007HttpBinding binding2 = new WS2007HttpBinding();
using (ChannelFactory<ICalculatorService> channelFacoty = new ChannelFactory<ICalculatorService>(binding2, new EndpointAddress("http://localhost:4000/calculator")))
{
ICalculatorService cal = channelFacoty.CreateChannel();
Console.WriteLine( cal.Add(1, 3));
Console.Read();
}
Но если ваша сервисная сторона имеет специальную конфигурацию подключения ws2007, вам лучше настроить настройку ws2007httpbing клиентской стороны в соответствии с его конфигурацией сервисной стороны.
Если ваша сторона службы опубликовала свои метаданные, вы можете добавить ссылку на нее и напрямую использовать клиент для вызова службы.
https://www.dotnetforall.com/adding-wcf-service-reference-client/
Для svc адрес метаданных службы по умолчанию - это адрес + WSDL,
например, ваш адрес метаданных: http://servicetest.service.svc? Wsdl
Вы также можете использовать App.config для настройки вашего клиента.
<client>
<endpoint address="http://localhost:4000/calculator" binding="ws2007HttpBinding"
contract="ServiceInterface.ICalculatorService" name="cal" />
</client>
И затем вы можете напрямую создать клиента следующим образом:
using (ChannelFactory<ICalculatorService> channelFacoty = new ChannelFactory<ICalculatorService>("cal"))
{
ICalculatorService cal = channelFacoty.CreateChannel();
Console.WriteLine( cal.Add(1, 3));
Console.Read();
}
Пожалуйста, настройте ваш клиент в соответствии с конфигурацией конечной точки на стороне вашего сервера.
Мой
<service name="Service.CalculatorService" >
<endpoint address="http://localhost:4000/calculator" binding="ws2007HttpBinding" contract="ServiceInterface.ICalculatorService"></endpoint>
</service>