2011-12-10 4 views
0

Предположим, мой WCF интерфейс объявлен как это:Могу ли я передать массив с помощью WCF DataMember

[ServiceContract] 
public interface IManagementConsole 
{ 
    [OperationContract] 
    ConsoleData GetData(int strategyId); 

[DataContract] 
public class ConsoleData 
{ 
    ..... 
    [DataMember] 
    public int[] GetConnectionsStats { get; set; } 
} 

В своей программе я просто присвоить значение:

.... 
ConsoleData data = new ConsoleData(); 
.... 
data.GetConnectionsStats = Program.GetConnectionsStats(); 

вопрос - будет ли это работать? Массив на самом деле является указателем? Вероятно, указатель будет передан через WCF вместо передачи данных массива?

+1

WCF преобразует все сообщения в формат XML для передачи - поэтому ваши массивы будут преобразовываться в массивы в документе XML, в основном. Нет указателей или ссылок на другую сторону связи в WCF (это ** не ** механизм удаленного вызова процедуры) –

ответ

1

Ничто не мешает вам передавать массив от клиента к серверу и от сервера к клиенту. Помните, что до фактической отправки и получения данные сериализуются для транспортировки по кабелю. Итак, никаких указателей. Данные сериализуются со стороны отправителя и десериализуются обратно со стороны приемника.

В примере, который вы показали, есть служебная операция, которая возвращает объект, содержащий массив целых чисел. Когда клиент вызывает метод GetData, сервер будет сериализовать контракт ConsoleData с использованием сконфигурированного привязки и отправить его по проводке.

На стороне клиента копия этих данных будет восстановлена ​​путем десериализации полученного.

+0

, поэтому WCF может сериализовать массив int для меня? может ли он сериализовать массив объекта? – javapowered

+1

@javapowered, да WCF будет сериализовать массив int для вас. Что касается массива объекта, он также сделает это, но вам нужно будет указать известные типы (также как все возможные типы, которые может вернуть этот сервер): http://msdn.microsoft.com/en- нас/библиотека/ms730167.aspx –

0

WCF не передает указатель массива. Он обеспечивает возможность создания сервиса, который вы потребляете из приложения, и он обменивается сообщениями через базовое раскрытие методов, которые используют полезную нагрузку Xml для передачи данных через десериализацию и т. Д.

Что произойдет, вы будете внедрять сервис, который реализует ваш IManagementInterface который, в свою очередь, будет реализовывать ваш метод GetData.

Это возвращает вас к вашему объекту ConsoleData, который позволит вам использовать и будет содержать свойство GetConnectionStats, которое будет иметь данные, которые вы установили бы во время вашего метода GetData.

Итак, короче говоря. Массив, который вы инициализируете в своей службе, переносится как данные в ваше приложение, где оно затем десериализуется обратно в его формат для использования.

Смежные вопросы