Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
После создания службы необходимо создать прокси-сервер клиента WCF. Клиентское приложение использует прокси-сервер клиента WCF для взаимодействия со службой. Клиентские приложения обычно импортируют метаданные службы для создания клиентского кода WCF, который можно использовать для вызова службы.
Ниже приведены основные шаги по созданию клиента WCF:
Скомпилируйте код службы.
Создайте прокси-сервер клиента WCF.
Создайте экземпляр прокси-сервера клиента WCF.
Прокси-сервер клиента WCF можно создать вручную с помощью средства служебной программы метаданных модели службы (SvcUtil.exe) для получения дополнительных сведений см. в разделе "Служебная программа метаданных ServiceModel" (Svcutil.exe). Прокси-сервер клиента WCF также можно создать в Visual Studio с помощью функции добавления ссылки на службу . Чтобы создать прокси-сервер клиента WCF с помощью любого метода, необходимо запустить службу. Если служба размещена самостоятельно, необходимо запустить хост. Если служба размещена в IIS/WAS, вам не нужно ничего делать.
Инструмент работы с метаданными ServiceModel
Средство служебной программы метаданных ServiceModel (Svcutil.exe) — это средство командной строки для создания кода из метаданных. Ниже приведен пример базовой команды Svcutil.exe.
Svcutil.exe <service's Metadata Exchange (MEX) address or HTTP GET address>
Кроме того, можно использовать Svcutil.exe с файлами языка описания веб-служб (WSDL) и языка определения схемы XML (XSD) в файловой системе.
Svcutil.exe <list of WSDL and XSD files on file system>
Результатом является файл кода, содержащий клиентский код WCF, который клиентское приложение может использовать для вызова службы.
Вы также можете использовать средство для создания файлов конфигурации.
Svcutil.exe <file1 [,file2]>
Если задано только одно имя файла, то это имя выходного файла. Если задано два имени файлов, первый файл является входным файлом конфигурации, содержимое которого объединяется с созданной конфигурацией и записывается во второй файл. Дополнительные сведения о конфигурации см. в разделе "Настройка привязок для служб".
Это важно
Незащищенные запросы метаданных представляют определенные риски аналогично любым незащищенным сетевым запросам: если вы не уверены, что конечная точка, с которой вы общаетесь, соответствует заявленной, информация, которую вы извлекаете, может быть метаданными из вредоносного сервиса.
Добавление ссылки на службу в Visual Studio
При выполнении службы щелкните правой кнопкой мыши проект, содержащий прокси-сервер клиента WCF, и выберите "Добавить>ссылку на службу". В диалоговом окне "Добавить ссылку на службу" введите URL-адрес службы, которую вы хотите вызвать, и нажмите кнопку "Перейти ". В диалоговом окне отобразится список служб, доступных по указанному адресу. Дважды щелкните службу, чтобы просмотреть доступные контракты и операции, укажите пространство имен для созданного кода и нажмите кнопку "ОК ".
Пример
В следующем примере кода показан контракт службы, созданный для службы.
// 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 и Добавить ссылку на службу в Visual Studio генерирует следующий клиентский класс WCF. Класс наследует от универсального класса ClientBase<TChannel> и реализует интерфейс ICalculator
. Средство также создает ICalculator
интерфейс (не показан здесь).
public partial class CalculatorClient : System.ServiceModel.ClientBase<ICalculator>, ICalculator
{
public CalculatorClient()
{}
public CalculatorClient(string endpointConfigurationName) :
base(endpointConfigurationName)
{}
public CalculatorClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{}
public CalculatorClient(string endpointConfigurationName,
System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress)
{}
public CalculatorClient(System.ServiceModel.Channels.Binding binding,
System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress)
{}
public double Add(double n1, double n2)
{
return base.Channel.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 endpointConfigurationName As String)
MyBase.New(endpointConfigurationName)
End Sub
Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String)
MyBase.New(endpointConfigurationName, remoteAddress)
End Sub
Public Sub New(ByVal endpointConfigurationName As String,
ByVal remoteAddress As System.ServiceModel.EndpointAddress)
MyBase.New(endpointConfigurationName, remoteAddress)
End Sub
Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding,
ByVal remoteAddress As System.ServiceModel.EndpointAddress)
MyBase.New(binding, remoteAddress)
End Sub
Public Function Add(ByVal n1 As Double, ByVal n2 As Double) As Double
Implements ICalculator.Add
Return MyBase.Channel.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: подключение сокета было прервано. Это может быть вызвано ошибкой обработки сообщения, превышением времени ожидания получения удаленным узлом или проблемой базового сетевого ресурса.
При возникновении этих типов исключений лучшая методика решения проблемы — включить трассировку на стороне службы и определить, какое исключение произошло там. Дополнительные сведения о трассировке см. в разделе "Трассировка " и "Использование трассировки для устранения неполадок с приложением".
См. также
- Практическое руководство. Создание клиента
- Практическое руководство. Доступ к службам с помощью дуплексного контракта
- Как асинхронно вызывать операции службы
- Практическое руководство. Доступ к службам с помощью контрактов One-Way и Request-Reply
- Практическое руководство. Доступ к службе WSE 3.0
- Общие сведения о созданном клиентском коде
- Практическое руководство. Сокращение времени запуска клиентских приложений WCF с использованием XmlSerializer
- Определение поведения клиента Run-Time
- Настройка поведения клиента