У меня есть веб-сервис в C#, который вызывает sql серверную базу данных. Этот веб-сервис тестируется тестовым проектом в visual studio.
Я добавил ссылку на веб-сервис в тестовый проект и назвал ее из моего метода тестирования следующим образом:
[TestMethod]
public void testBaseConstruiteDansSetUp()
{
//int result5 = service5.Multiply(2, 5);
//Assert.AreEqual(10, result5);
Market5.Magasin[] magasins = Service5.getMagasins();
//Assert.AreEqual(1, sm.Magasins.Length);
Assert.AreEqual(2, magasins[0].Rayons[0].Produits.Length);
}
При вызове метода getMagasins () при запуске генерируется следующая ошибка:
System.Web.Services.Protocols.SoapException: System.Web.Services.Protocols.SoapException: сервер не смог обработать спрос. ---> System.InvalidOperationException: ошибка при генерации файла XML. ---> System.InvalidOperationException: тип System.Data.Entity.DynamicProxies.Magasin_1337937A1EAAA5313EBABDF20700EF9CF8D2AFFD23D16247FDF34BB84D67C50F не ожидался. используйте атрибут XmlInclude или SoapInclude, чтобы указать типы, которые не являются статически известными.
обратите внимание, что я использую структуру сущностей в модельном проекте, а проект EF является ссылкой в веб-службе (в Фактически это ASP. NET проект с файлом ASMX) и в тестовом проекте.
Вот метод getMagasins () веб-службы:
[WebMethod]
public List<Magasin> getMagasins()
{
using (var ctx = new MarketContext("sqlserverPersonalId"))
{
//new MyDataInitializer().InitializeDatabase(ctx);
var produitMagasin = new ProduitMagasin() { Nom = "Pommes", Quantite = 10 };
ctx.ProduitsMagasin.Add(produitMagasin);
var rayon1 = new Rayon() { Nom = "Fruits & Légumes2", Produits = new List<ProduitMagasin> { produitMagasin } };
ctx.Rayons.Add(rayon1);
ctx.SaveChanges();
}
//récupération en base
DbSet<Magasin> dbMagasins = null;
List<Magasin> magasins = new List<Magasin>();
using (var ctx2 = new MarketContext("sqlserverPersonalId"))
{
dbMagasins = ctx2.Magasins;
foreach (Magasin mg in dbMagasins)
{
magasins.Add(mg);
}
}
return magasins;
}
}
обратите внимание, что в нужен тестовый метод Market5.Magasins, и мне пришлось изменить тип Model.Magasin на Market5.Magasin: программа использует тип Magasin, предоставляемый службой, а не тот, который предоставляется проектом Model.
вот структура возврата метода getMagasins ():
HTTP / 1.1 200 OK Тип содержимого: application / soap + xml; charset = utf-8 Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<getMagasinsResponse xmlns="http://tempuri.org/">
<getMagasinsResult>
<Magasin>
<MagasinId>int</MagasinId>
<Rayons>
<Rayon xsi:nil="true" />
<Rayon xsi:nil="true" />
</Rayons>
</Magasin>
<Magasin>
<MagasinId>int</MagasinId>
<Rayons>
<Rayon xsi:nil="true" />
<Rayon xsi:nil="true" />
</Rayons>
</Magasin>
</getMagasinsResult>
</getMagasinsResponse>
</soap12:Body>
</soap12:Envelope>
как решить эту ошибку?
спасибо.
ps: вот в проекте Model the Magasin класс:
namespace Model
{
[Table("Magasin")]
public class Magasin
{
[Key]
public int MagasinId { set; get; }
public virtual List<Rayon> Rayons { set; get; }
}
}