Обращение к службам с использованием клиента WCF
Следующим шагом после создания службы является создание клиента WCF. Клиентское приложение использует клиент WCF для взаимодействия со службой. Клиентские приложения обычно импортируют метаданные службы, чтобы создать код клиента WCF, который можно будет использовать для вызова службы.
Список основных шагов по созданию клиента WCF включает следующие операции.
Скомпилируйте код службы.
С помощью средства Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe) создайте клиент WCF.
Средство ServiceModel Metadata Utility Tool
Служебное средство ServiceModel Metadata Utility Tool (Svcutil.exe) — это программа командной строки, предназначенная для создания кода на основе метаданных. Ниже приведен пример базовой команды Svcutil.exe.
Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>
Средство Svcutil.exe можно также использовать с файлами языков WSDL (язык описания веб-служб) и XSD (язык определения схемы XML) в файловой системе.
Svcutil.exe <list of WSDL and XSD files on file system>
В результате будет получен файл, содержащий код клиента WCF, который клиентское приложение может использовать для вызова службы.
Кроме того, с помощью этого средства можно создавать файлы конфигурации.
Svcutil.exe <file1 [,file2]>
Если задано только одно имя файла, это имя выходного файла. Если задано два имени файла, то первый файл является исходным файлом конфигурации, содержимое которого объединяется с создаваемой конфигурацией и записывается во второй файл. Дополнительные сведения конфигурации см. в разделе Настройка привязок для служб Windows Communication Foundation.
![]() |
---|
Незащищенные запросы метаданных представляют определенную угрозу, подобно незащищенным сетевым запросам. Если нет уверенности, что конечная точка, с которой осуществляется взаимодействие, является той точкой, за которую она себя выдает, получаемая информация может представлять собой метаданные вредоносной службы. |
Пример
В следующем примере кода показан созданный контракт службы.
// Define a service contract.
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
// Other methods are not shown here.
}
' Define a service contract.
<ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")> _
Public Interface ICalculator
<OperationContract()> _
Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
' Other methods are not shown here.
End Interface
Средство ServiceModel Metadata Utility Tool создает следующий клиентский класс WCF. Класс наследует универсальному классу ClientBase и реализует интерфейс ICalculator
. Кроме того, это средство создает интерфейс ICalculator
(не показан в этом примере).
public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
public CalculatorClient(){}
public CalculatorClient(string configurationName) :
base(configurationName)
{}
public CalculatorClient(System.ServiceModel.Binding binding) :
base(binding)
{}
public CalculatorClient(System.ServiceModel.EndpointAddress address,
System.ServiceModel.Binding binding) :
base(address, binding)
{}
public double Add(double n1, double n2)
{
return base.InnerChannel.Add(n1, n2);
}
}
Partial Public Class CalculatorClient
Inherits System.ServiceModel.ClientBase(Of ICalculator)
Implements ICalculator
Public Sub New()
MyBase.New
End Sub
Public Sub New(ByVal configurationName As String)
MyBase.New(configurationName)
End Sub
Public Sub New(ByVal binding As System.ServiceModel.Binding)
MyBase.New(binding)
End Sub
Public Sub New(ByVal address As _
System.ServiceModel.EndpointAddress, _
ByVal binding As System.ServiceModel.Binding)
MyBase.New(address, binding)
End Sub
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As _
Double Implements ICalculator.Add
Return MyBase.InnerChannel.Add(n1, n2)
End Function
End Class
Использование клиента WCF
Чтобы воспользоваться клиентом WCF, создайте экземпляр клиента WCF и вызывайте его методы, как показано в следующем примере кода.
// Create a client object with the given client endpoint configuration.
CalculatorClient calcClient = new CalculatorClient("CalculatorEndpoint"));
// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = calcClient.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
' Create a client object with the given client endpoint configuration.
Dim calcClient As CalculatorClient = _
New CalculatorClient("CalculatorEndpoint")
' Call the Add service operation.
Dim value1 As Double = 100.00D
Dim value2 As Double = 15.99D
Dim result As Double = calcClient.Add(value1, value2)
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result)
Отладка создаваемых клиентом исключений
Многие исключения, создаваемые клиентом WCF, вызываются исключениями, которые возникают на стороне службы. Ниже приведены некоторые примеры.
SocketException: существующее подключение было принудительно закрыто удаленным узлом.
CommunicationException: базовое подключение было неожиданно закрыто.
CommunicationObjectAbortedException: подключение к сокету было прервано. Это может быть вызвано ошибкой при обработке сообщения, истечением времени ожидания на удаленном узле или проблемой с соответствующим сетевым ресурсом.
Если происходят исключения этих типов, лучшим решением проблемы является включение трассировки на стороне службы и определение исключения, которое там произошло. Дополнительные сведения трассировке см. в разделах Трассировка и Использование трассировки для устранения неполадок приложения.
См. также
Задачи
Как создать клиент Windows Communication Foundation
Практическое руководство. Доступ к службам с дуплексным контрактом
Как асинхронно вызывать операции службы WCF
Практическое руководство. Доступ к службам WCF с односторонним контрактом и контрактом типа «запрос-ответ»
Как обращаться к службе WSE 3.0 с помощью клиента WCF
Как сократить время запуска клиентских приложений WCF с использованием XmlSerializer
Основные понятия
Основные сведения о созданном коде клиента
Задание поведения клиента во время выполнения
Настройка поведений клиентов