Я неправильно понял ваш вопрос или где я потерял конфигурацию? Я не мог воспроизвести вашу проблему, ссылаясь на ваши шаги. На моей стороне. клиент мог нормально получать правильные значения. Я предлагаю вам добавить пространство имен в контракт данных.
Вот мое демо, желаю, чтобы оно вам пригодилось.
Сервер (IP: 10.157.13.69)
class Program
{
static void Main(string[] args)
{
using (ServiceHost sh = new ServiceHost(typeof(MyService)))
{
sh.Opened += delegate
{
Console.WriteLine("service is ready...");
};
sh.Closed += delegate
{
Console.WriteLine("Service is closed");
};
sh.Open();
Console.ReadLine();
sh.Close();
}
}
}
[ServiceContract]
public interface IService
{
[OperationContract]
Product SayHello();
}
public class MyService : IService
{
public Product SayHello()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ID", typeof(int)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dt.Rows.Add(10, "Lemon");
dt.Rows.Add(11, "Peach");
DataSet ds = new DataSet();
ds.Tables.Add(dt);
return new Product()
{
Id = 1,
Name = "Apple",
DS = ds
};
}
}
[DataContract(Namespace ="MyCorporation")]
public class Product
{
[DataMember]
public DataSet DS { get; set; }
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
}
App.config (сервер)
<system.serviceModel>
<services>
<service name="Server6.MyService" behaviorConfiguration="mybeh">
<endpoint address="" binding="basicHttpBinding" contract="Server6.IService" >
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:13060"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="mybeh">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"></serviceMetadata>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Клиент.
class Program
{
static void Main(string[] args)
{
ServiceReference1.ServiceClient client = new ServiceReference1.ServiceClient();
try
{
var result = client.SayHello();
var r2 = result.DS.Tables[0];
Console.WriteLine($"{result.Id},{result.Name}");
Console.WriteLine($"{r2.Rows[0][0]},{r2.Rows[0][1]}\n{r2.Rows[1][0]},{r2.Rows[1][1]}");
}
catch (Exception)
{
throw;
}
}
}
App.config (клиент).
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://10.157.13.69:13060/" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService" contract="ServiceReference1.IService"
name="BasicHttpBinding_IService" />
</client>
</system.serviceModel>
Result.
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.