Вам не нужно использовать ссылку «Добавить службу» или SvcUtil. Вы можете вручную создать клиентский прокси, который использует ваш интерфейс. Вам понадобится привязка в вашем web.config, чтобы использовать конструктор по умолчанию, или вы можете передать конечную точку и привязку.
Одним из больших преимуществ этого метода является то, что вам не нужно возиться с SvcUtil.exe каждый раз, когда вы меняете интерфейс и вам необходимо повторно создать прокси. Вместо этого вы получите ошибку компиляции, напоминающую, что этот класс неправильно реализует ваш интерфейс.
SvcUtil и Add Service Reference в основном используются для удаленных сервисов, где у вас нет доступа к исходному интерфейсу сервиса или контрактам. Утилита просто читает сервис wsdl и генерирует его для вас. Отсюда и сумасшедшее название, чтобы убедиться, что оно не конфликтует с чем-то, что уже есть в вашем проекте.
Кроме того, как упоминал Reddog, перемещение ваших контрактов на обслуживание и передачу данных в другой проект / dll позволяет вам легче ссылаться на них.
public partial class MyServiceClient : System.ServiceModel.ClientBase<MyProject.Contracts.IMyService>, MyProject.Contracts.IMyService
{
#region IMyService Members
public void RecordSearchAnalytics(int a, int b, int c, string d, string e)
{
base.Channel.RecordSearchAnalytics(a, b, c, d, e);
}
#endregion
#region boiler plate code
public MyHServiceClient()
{
}
public MyHServiceClient(string endpointConfigurationName) :
base(endpointConfigurationName)
{
}
public MyHServiceClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{
}
public MyHServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{
}
public MyHServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress)
{
}
#endregion
}