Basit olarak Farmlar arası Service Application Paylaşımı hakkında bilgi vermeye çalışacağım. Ne gerek var, ben technetten okurum diyorsanız buyurun http://technet.microsoft.com/en-us/library/ff621100.aspx
Edit : Pek basit ve kısa olmadı, yani ben bu kadar uzayabileceğini düşünmemiştim…
Ama technette olmayan, basit hatalar ve çözümlerinden de bahsedecem.
Farmlar arasında paylaşımını yapabileceğiniz Service Application’lar aşağıdakilerdir.
- Business Data Connectivity
- Managed Metadata
- User Profile
- Search
- Secure Store
- Web Analytics
| Tanımlar A Farmı : Paylaşımı yapacak olan Farm – Publisher Farm B Farmı : Paylaşımdan yararlanacak olan Farm – Consumer Farm |
Basit Olarak Yapılması Gerekenler
Exchange trust certificates between the farms ile ilgili Technet linki : http://technet.microsoft.com/en-us/library/ee704552.aspx
Bu işlem için A farmından Root Certificate, B farmından Root ve STS Certificate larını almamız gerekecek. Sertifikaları Central Administration ı kullanarak da alabiliriz. Ama bence bununla uğraşmayın. Aşağıdaki komutları satır satır Sharepoint Management Shell e yapıştırıp, çalıştırın. Bunun sonucunda C dizininde sertifikaların oluştuğunu göreceksiniz.
A Farmı (Servisi Share edecek olan Farm):
Root Certificate
$rootCert = (Get-SPCertificateAuthority).RootCertificate
$rootCert.Export(“Cert”) | Set-Content C:\PublishingFarmRoot.cer -Encoding byte
B Farmı (Servisi kullanacak olan Farm):
Root Certificate
$rootCert = (Get-SPCertificateAuthority).RootCertificate
$rootCert.Export(“Cert”) | Set-Content C:\ConsumingFarmRoot.cer -Encoding byte
STS Certificate
$stsCert = (Get-SPSecurityTokenServiceConfig).LocalLoginProvider.SigningCertificate
$stsCert.Export(“Cert”) | Set-Content C:\ConsumingFarmSTS.cer -Encoding byte
Sertifikalarımızı oluşturduktan sonra B Farmının sertifikalarını A Serverına, A Farmının sertifikasını ise B Serverına taşıyoruz. Daha sonra yine aşağıdaki komutlar ile bu sertifikaları import ediyoruz. Sertifikaların isimlerini değiştirmediyseniz ve kopyalanan sertifikaları yine C:\ dizinine koyduysanız aşağıdaki komutlarda herhangi bir değişiklik yapmadan sertifikaları import edebilirsiniz.
A Farmı (Servisi Share edecek olan Farm):
Root Certificate
$trustCert = Get-PfxCertificate C:\ConsumingFarmRoot.cer
New-SPTrustedRootAuthority ConsumingFarm -Certificate $trustCert
STS Certificate
$stsCert = Get-PfxCertificate c:\ConsumingFarmSTS.cer
New-SPTrustedServiceTokenIssuer ConsumingFarm -Certificate $stsCert
B Farmı (Servisi kullanacak olan Farm):
Root Certificate
$trustCert = Get-PfxCertificate C:\PublishingFarmRoot.cer
New-SPTrustedRootAuthority PublishingFarm -Certificate $trustCert
Trust işlemini sağlamak bu kadar. İlk başlarda biraz göz korkutabilir fakat görüldüğü kadar zor değil. Burada dikkat etmeniz gereken sadece Hangi sertifikanın Publish veya Consumer Farmlardan export edildiği ve/veya import edildiği. Geri kalan işlemler copy/paste
- 2. Service Application’ı Yayınlamak
On the publishing farm, publish the service application ile ilgili Technet linki : http://technet.microsoft.com/en-us/library/ee704545.aspx
Bu adımı da yine Sharepoint Management Shell kullanarak yapabilirsiniz. Ben Central Administration dan yapmanızı öneririm. Service Application’ı çok basit bir şekilde publish ediyoruz.
Central Administration -> Application Management -> Manage Service Applications yolunu izleyip, yayınlamak istediğimiz servisi seçiyoruz ve ribbon kısmındaki Publish butonuna tıklıyoruz.

Karşımıza çıkan ekranda, Publish to other farms alanının işaretli olduğuna dikkat ediyoruz ve Published URL alanında yazan URI kopyaladığımızdan emin olduktan sonra OK butonu ile servisimizi publish ediyoruz.
On the consuming farm, set the permission to the appropriate service applications ile ilgili Technet linki : http://technet.microsoft.com/en-us/library/ff700211.aspx
Bu işlem temel olarak çok basit. Yapmanız gereken sadece iki adet işlem var.
Servisi kullanacak olan B Farmı üzerinde, Sharepoint Management Shelli çalıştırıp aşağıdaki komutu yazıyoruz.
Get-SPFarm | Select Id
Bu komutun çıktısı bize yetki verilecek olan Farmın ID sini verecek. Daha sonra Servis Paylaşımı yapacak olan A Farmında, Manage service applications kısmında Application Discovery and Load Balancing Service Application servisinini seçiyoruz. Yine Ribbon kısmından Permissions butonuna tıklıyoruz.

Bir önceki adımda elde ettiğimiz ID yi buraya yapıştırıyoruz.

Add butonu ile alt kısıma eklenen ID ye Full Control yetkisi verip OK butonuna tıklıyoruz.

- 4. Paylaşılan Service Bağlanma
On the consuming farm, connect to the remote service application ile ilgili Technet linki : http://technet.microsoft.com/en-us/library/ee704558.aspx
Tüm ayarlarımız tamamlandıktan sonra geriye paylaştığımız bu servise bağlanmak kaldı. Central Managementtan Manage service applications ekranına geliyoruz ve ribbonlardan Connect butonuna tıklıyoruz.

Buradan bağlanamak istediğimiz Servisi seçiyoruz. Karşımıza gelen ekranda Farm or Service Application address alanına 2. adımda bir kenara not aldığımız Published URL stringini yapıştırıyoruz ve OK butonu ile işlemi tamamlıyoruz. Published URL i bir kenara not etmediyseniz, 2. adımı tekrarlamanız durumunda yine aynı URI yi elde edebilirsiniz.

Yukarıdaki anlattığım adımlar ve ayarlardan sonra, bağlanmaya çalışırken, aşağıdaki gibi bir hata alabilirsiniz.
“Unable to connect to the specified address. Verify the URL you entered and contact the service administrator for more details.”
Tabi bu hata size anlamlı gelmeyecektir, zira çok genel bir hata. Bunun üzerine ULS loglarına (..\..\14\LOGS) bakacaksınız. Burada da muhtemelen aşağıdaki hatayı alacaksınız.
“SharePoint Foundation Claims Authentication fo1t Monitorable …inistration.Claims.SPClaimProviderManager.GetClaimProvidersForContext(Uri context, SPClaimProviderOperationOptions mode, IEnumerable`1 providerNames) at Microsoft.SharePoint.Administration.Claims.SPClaimProviderOperations.ClaimsForEntity(Uri context, SPClaimProviderOperationOptions mode, String[] providerNames, SPClaim entity) at Microsoft.SharePoint.IdentityModel.SPSecurityTokenService.AugmentClaimsIdentity(IClaimsIdentity identity, SPClaim identityClaim, RequestSecurityToken request) at Microsoft.SharePoint.IdentityModel.SPSecurityTokenService.GetOutputClaimsIdentity(IClaimsPrincipal principal, RequestSecurityToken request, Scope scope) at Microsoft.IdentityModel.SecurityTokenService.SecurityTokenService.Issue(IClaimsPrincipal principal, RequestSecurityToken request) … “
Buna göre yapmış olduğunuz hatalar aşağıdakilerden biri olabilir :
- Sertifika export ve import işlemleri sırasında hangi sertifikanın hangi serverdan alınıp, hangi servera yükleneceğini karıştırmış olabilirsiniz. Eğer sorunun bu olduğunu düşünüyorsanız, Central Administration -> Security -> Trust yolunu izleyip, her iki serverdaki yüklemiş olduğunuz sertifikaları silin. Burada bulunan local sertifikayı silmemeye özen gösterin.
Daha sonra birinci adımı tekrarlayın. - Yukarıda anlattığım, üçüncü adımdaki aşamayı yanlış uygulamış olmak. Örneğin; Servisi kullanacak olan farmdaki Application Discovery and Load Balancing Service ine, servisi publish edecek olan farma yetki vermek. Tam tersi olması gerekiyordu.
- A ve B farmlarının kurulumlarının farklı domain userları ile yapılması. Bu ayrı bölgelerdeki farmları ayrı sorumlulara teslim etmek için gayet makul ve mantıklı bir işlem. Böyle bir durum ile karşı karşıya iseniz, Paylaşımı yapılan Service Application’da, diğer farmın userına da Full Control yetkisi vermeniz gerekecektir.
- A ve B Farmlarının bulunduğu serverlar birbirleri ile 32844 portundan konuşabilir durumda olmalıdırlar.
-
Muhtemelen yukarıdaki çoğu durum ile karşılaşmayacaksınız. Bu satıra kadar indiyseniz hiçbir şey derdinize çözüm olmamış demektir. Aslında çözümünüz çok basit birşey olabilir. Sharepoint’in temelinden gelen bir çözüm
IISRESET. Evet evet yanlış duymadınız, service bağlanmayı denemeden önce, yaptığınız değişikliklerden sonra, her iki servera da mutlaka iisreset atın.
Bunlar da yardımcı olmadıysa, probleminizi paylaşırsanız sevinirim.



