SharePoint + .NET — sıfırdan zihin haritası
Bunu gerçekten hiç bilmiyormuşsun gibi ele alıyorum. Amaç uzman olmak değil, mülakatta "bu kavramları biliyorum, üretimde derinleşmeye hazırım" diyebilmek.
1. C#/.NET tazeleme
Sen zaten production'da C# yazdın — sözdizimi hafızanda hızlıca geri gelecek. Modern C#'ta en çok göreceğin kalıp: interface + async/await + dependency injection.
public interface IFaturaServisi
{
Task<Fatura> GetFaturaAsync(int musteriId);
}
public class FaturaServisi : IFaturaServisi
{
private readonly HttpClient _client;
public FaturaServisi(HttpClient client) => _client = client;
public async Task<Fatura> GetFaturaAsync(int musteriId)
{
var response = await _client.GetAsync($"/api/faturalar/{musteriId}");
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<Fatura>();
}
}2. SharePoint REST API
Her SharePoint sitesi /_api/ altında bir REST arayüzü sunar. Kaynaklar (liste, öğe, kullanıcı) OData tarzı URL'lerle adreslenir.
// GET — bir listedeki öğeleri oku
fetch(`${siteUrl}/_api/web/lists/getbytitle('Duyurular')/items`, {
headers: { Accept: "application/json;odata=verbose" },
})
.then(r => r.json())
.then(data => console.log(data.d.results));
// POST — yeni öğe ekle. X-RequestDigest ZORUNLU (CSRF koruması)
fetch(`${siteUrl}/_api/web/lists/getbytitle('Duyurular')/items`, {
method: "POST",
headers: {
Accept: "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
"X-RequestDigest": digestValue, // önce ayrı bir çağrıyla alınır
},
body: JSON.stringify({
__metadata: { type: "SP.Data.DuyurularListItem" },
Title: "Yeni duyuru",
}),
});3. Webhook & Workflow
Webhook: bir SharePoint listesi değiştiğinde senin servisine "bir şey değişti" diye haber gönderir (push). Workflow: "bir öğe eklendiğinde onay maili gönder" gibi iş süreçlerini kod yazmadan (Power Automate / SharePoint Designer ile) tanımlamandır.
// Bir SharePoint listesindeki değişiklikleri dinlemek için abone ol
POST https://tenant.sharepoint.com/sites/intranet/_api/web/lists('{list-id}')/subscriptions
{
"resource": "https://tenant.sharepoint.com/sites/intranet/_api/web/lists('{list-id}')",
"notificationUrl": "https://myapp.azurewebsites.net/api/notify",
"expirationDateTime": "2026-12-01T00:00:00Z"
}
// SharePoint bu listede DEĞİŞİKLİK olunca notificationUrl'e POST atar.
// Dikkat: içerik GÖNDERMEZ, sadece "bir şey değişti" der — sen tekrar GET ile çekersin.4. Farm mimarisi & servisler
| Bileşen | Ne işe yarar |
|---|---|
| WFE (Web Front End) | Kullanıcı HTTP isteklerini karşılayan sunucular — IIS burada çalışır |
| Application server | Search, User Profile gibi "service application"ları çalıştırır |
| SQL Server (content DB) | Tüm liste/doküman/metadata verisi burada saklanır |
| Search Service | Site koleksiyonlarındaki içeriği indeksler, arama sorgularını cevaplar |
| Distributed Cache | Oturum/sayfa verisini WFE'ler arasında paylaşılan bir cache'te tutar → hız |
| Managed Metadata Service | Merkezi taksonomi/terim deposu — tüm sitelerde tutarlı etiketleme (ör. "Departman" listesi hep aynı) |
5. PowerShell ile yönetim
Site/servis yönetimi genelde UI'dan değil, script'lenebilir PowerShell cmdlet'leriyle yapılır.
# SharePoint Management Shell
Get-SPSite -Limit All | Select Url, ContentDatabase
New-SPWeb -Url "https://intranet/sites/ik/yeni-sayfa" -Template "STS#0"
Get-SPServiceApplication | Where { $_.TypeName -like "*Search*" }
Restart-Service SPTimerV4 # SharePoint zamanlanmış görev servisini yeniden başlat6. WCF & SOAP
WCF (Windows Communication Foundation), .NET'in servis oluşturma çatısı — SOAP (XML tabanlı, katı sözleşmeli) veya REST olarak servis açabilir. Modern .NET'te yerini büyük ölçüde ASP.NET Core Web API'ye bıraktı ama SharePoint'in eski entegrasyonlarında hâlâ karşına çıkar.
[ServiceContract]
public interface IFaturaService
{
[OperationContract]
Fatura GetFatura(int musteriId);
}
public class FaturaService : IFaturaService
{
public Fatura GetFatura(int musteriId) => _repo.Bul(musteriId);
}
// WCF, bu servisi SOAP (XML tabanlı, katı şema) veya REST olarak dışarı açabilir.
// SharePoint'in eski sürümlerinde iç servisler hâlâ WCF/SOAP tabanlıdır.7. Kafka (tercihen) & AI (senin gerçek farkın)
Kafka, servisler arası asenkron mesajlaşma için bir event log'tur — "fatura ödendi" olayını üreten servis, onu dinleyen tüm servislere (bildirim, raporlama) tek tek bağlanmadan ulaştırır. İlan bunu "tercihen" işaretlemiş, derinlemesine bilmen beklenmiyor — kavramı tanıman yeterli.