У меня есть клиент, который выполняет некоторые sql и получает результаты в виде набора данных. Этот DataSet помещается в объект с именем «ExecutionResults», где свойство Data с типом Object содержит этот DataSet. Я хочу отправить этот объект «ExecutionResults» по сети, вызвав метод веб-службы WCF «SavePackageExecutionResults (результаты ExecutionResults)», и иметь службу для десериализации свойства «Данные» ExecutionResults в DataSet.
Я создаю и клиента, и сервис. Я знаю, что есть два способа заставить сервис десериализовать свойство «Данные» ExecutionResults в DataSet. Одним из способов будет ссылка на библиотеку для ExecutionResults на клиенте, тогда тот же тип ExecutionResults будет использоваться для прокси-сервера при его создании. Другим способом было бы не ссылаться на библиотеку, которая содержит «ExecutionResults», и позволить прокси-серверу создать собственный класс ExecutionResults, который реализует IExtensibleDataObject. Затем я могу пометить этот класс с помощью [KnownType (typeof (DataSet))]], чтобы заставить службу десериализовать свойство «Data» в DataSet.
Как правильно выполнить то, что я пытаюсь сделать? Мне кажется, что оба способа, о которых я упомянул выше, подразумевают некоторый уровень знаний общего типа между клиентом и сервисом. То есть, похоже, что в обоих сценариях, которые я применяю, служба знает о System.Data.DataSet. Является ли один из упомянутых выше сценариев менее «злым», чем другой?