حالا که این پست بالا اومد، روشی که خودم انجام دادم رو مینویسم:
یه صحفه داریم به اسم sitemap.aspx که توی پیج لود اون، این کد ها نوشته میشه (کامنت در کدها هست)
protected void Page_Load(object sender, EventArgs e)
{
/*
آدرس های سایت مپ رو با روتینگ به این صورت میکنیم:
site.com/sitemap1.xml
site.com/sitemap2.xml
site.com/sitemap3.xml
که روتینگ آن به این صورت میشه:
routes.MapPageRoute(
"sitemap-Rout",
"sitemap{id}.xml",
"~/sitemap.aspx"
);
*/
Response.Clear();
Response.ContentType = "text/xml";
using (XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, Encoding.UTF8))
{
int selectCount = 20000; // تعداد ردیف های سایت مپ
int skip = 0;
int pagenum = 0;
int.TryParse(RouteData.Values["id"] as string, out pagenum);// گرفتن صفحه سایت مپ از آدرس.
if (pagenum == 0)
return;
skip = (pagenum-1) * selectCount;//تعداد رکورهایی که حذف میشن از کوئری
string Home = "http://site.com/";
//شروع شی XML
writer.WriteStartDocument();
writer.WriteStartElement("urlset");
writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
using (DataAccessDataContext _data = new DataAccessDataContext())
{
//گرفتن تعداد مورد نظر از محصولات و اسکیپ کردن بر اساس صفحه.
foreach (Product item in _data.Products.OrderBy(a => a.ID).Skip(skip).Take(selectCount))
{
writer.WriteStartElement("url");
writer.WriteElementString("loc", Home + "product/"+item.ID);
writer.WriteElementString("changefreq", "daily");
writer.WriteElementString("priority", "1");
writer.WriteEndElement();
}
}
//پایان شی XML
writer.WriteEndDocument();
writer.Flush();
}
Response.End();
}