Что нового для WCF в Visual Studio 2008 - Тестовый клиент, предоставляемый WCF

ОГЛАВЛЕНИЕ

Тестовый клиент, предоставляемый WCF

Кроме узла для размещения служб в Visual Studio 2008 имеется универсальный тестовый клиент, позволяющий выполнять простейшее тестирование операций большинства служб. При стандартной установке тестовый клиент, WcfTestClient.exe, располагается в папке C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE. Ему требется единственный аргумент командной строки с указанием адреса метаданных службы, которую вы намерены тестировать:

WcfTestClient.exe http://localhost:9000/

В качестве значения аргумента можно указать любой адрес метаданных, к примеру HTTP-GET, или конечную точку метаданных с доступом по пртоколу HTTP, TCP или IPC (именованные каналы). Можно указывать сразе несколько адресов:

WcfTestClient.exe http://localhost:8000/ net.tcp://localhost:9000/MEX

Клиент WcfTestClient — это приложение Windows Forms 3.5 (см. рис. 3). Дерево в левой части содержит тестируемые службы и соответствующие конечные точки. Вы можете открыть контракт любой конечной точки и выбрать операцию. Информация, связанная с подобным вызовом, отображается на вкладке в правой панели. В качестве примера можно привести элементарный контракт и реализацию, представленные на рис. 4.

Рис. 4 A Sample Service

[ServiceContract]
interface IMyContract
{
  [OperationContract]
  string MyMethod(int someNumber,string someText);
}
class MyService : IMyContract
{
  public string MyMethod(int someNumber,string someText)
  {
  return "Hello";
  }
}

 

Рис. 3 Использование WcfTestClient

На вкладке методов, в разделе Request (Запрос) указывается целочисленное значение и строка, выступающие в роли параметров операции (см. рис. 3). Когда вы нажмете кнопку Invoke (Вызвать), будет выполнен вызов службы, а в разделе Response (Ответ) появятся возвращенные значения или выходные параметры. Если операция является односторонней, клиент WcfTestClient уведомит об успешном выполнении операции. В случае исключения появится сообщение с информацией о нем, и вам будет предложено выполнить повторный вызов.

Клиент WcfTestClient не поддерживает сеансы транспортного уровня (равно как и любые другие сеансы) с тестируемой службой. Все вызовы выполняются с использованием нового экземпляра прокси. Кроме того, вызовы выполняются асинхронно, поэтому интерфейс продолжает работать, но несмотря на это клиент WcfTestClient не позволяет выполнять несколько вызовов одновременно.

Клиент WcfTestClient создает сборку на основании файла прокси и файла CONFIG, а затем загружает ее из временной папки. Если щелкнуть в дереве элемент Config File, можно увидеть тот самый файл CONFIG, который использвоался при создании сборки (он создавался при добавлении ссылки на службу). Файл можно открыть на отдельной вкладке.

В отличие от старой тестовой страницы веб-служб ASMX в Visual Studio клиент WcfTestClient позволяет вызывать операции, содержащие перечисления, составные параметры, к примеру классы и структуры, состоящие из нескольких классов или структур, и даже коллекции и массивы параметров. Для этого нужно раскрыть соответствующие узлы в разделе Request, задать значения в раскрывающихся списках (к примеру перечисления) и выполнить вызов. Если операция допускает использование коллекции или массива, вам также нужно будет указать его длину. К примеру, запрос и ответ для следующей операции показаны на рис. 5:

 

Рис. 5 Указание длины и значений массива

[OperationContract]
bool ProcessNumbers(int[] numbers]

На панели Response также будут указаны возвращенные составные значения или выходные параметры. Здесь мы сталкиваемся с определенным недостатком клиента WcfTestClient: чтобы протестировать другую службу, приходится закрывать клиент, менять аргументы командной строки и снова запускать его. Было бы удобнее иметь возможность указывать адрес службы и в графическом интерфейсе тоже.

Клиент WcfTestClient можно интегрировать в решение Visual Studio 2008. Для этого сначала нужно добавить проект библиотеки классов в решение и удалить все ссылки, папки и исходные файлы: они вам не понадобятся. После этого нужно установить клиент WcfTestClient.exe в качестве внешней вызываемой программы и указать адрес метаданных (или несколько адресов) теструемой службы (или служб), к примеру адрес SVC проекта, размещенного на IIS или WAS, или любой другой адрес метаданных проекта размещения, неважно, входит он в ваш проект или нет.

Следует отметить, что клиент WcfTestClient невозможно использовать, если на компьютере установлена только платформа .NET Framework 3.0, поскольку клиент использует внутренний элемент управления .NET Framework 3.5 типа «сетка» (используемый для представления составных параметров).

Клиент WcfTestClient и узел WcfSvcHost можно использовать вместе для автоматического размещения службы в библиотеке служб и для ее тестирования:

WcfSvcHost.exe /service:MyService.dll    /config:App.config 
  /client:WcfTestClient.exe 
  /clientArgs:http://localhost:9000/ 

При использовании узла WcfSvcHost указывать аргументы метаданных необязательно. По умолчанию узел WcfSvcHost передает в указанное клиенткое приложение адреса метаданных, прописанные в файле CONFIG размещаемой службы. Указывать адреса явным образом нужно, только если они не указаны в файле CONFIG или если вы хотите, чтобы тестовый клиент использовал другие адреса. Если в файле CONFIG указано несколько конечных точек метаданных для выбранной службы, то использоваться они будут в следующем порядке: HTTP, TCP, IPC, HTTP-GET. Описанные этапы можно включить в Visual Studio 2008 для упрощения процедур размещения и тестирования служб. Чтобы это сделать, нужно указать WcfSvcHost.exe в качестве запускаемой программы (вместе с файлом CONFIG), а WcfTestClient.exe — в качестве клиента.