Bu makalede, geliştiricilerin karşılaşabilecekleri zorluklar açıklanmakta, performansı artırabilecek Otomasyon alternatifleri sunulmakta ve sunucu tarafında Otomasyon kaçınılmazsa Office'i yapılandırma yöntemleri önerilmektedir. Ancak geliştiriciler, aşağıda sunulan önerilerin bilgilendirme amaçlı olduğunu anlamalıdır. Microsoft, sunucu tarafında Office Otomasyonu'nu önermez ve desteklemez.
Not Bu bağlamda, "sunucu tarafı" terimi Microsoft Windows NT veya Microsoft Windows 2000 iş istasyonunda çalıştırılan kod için de geçerlidir; ancak kullanıcının oturum açtığı etkileşimli istasyondan başka bir Windows iş istasyonundan çalıştırılmalıdır. Örneğin, Görev Yöneticisi tarafından SYSTEM hesabı altından başlatılan kod, aynı ortamda "sunucu tarafı" ASP veya DCOM kodu olarak çalışır ve bu nedenle de çok sayıda aynı sorun yaşanır. Windows iş istasyonları ve COM hakkında daha fazla bilgi için, "Daha Fazla Bilgi" ve "Başvurular" bölümlerine bakın.
Microsoft, katılımsız ve etkileşimli olmayan istemci uygulamalarından veya bileşenlerinden (ASP, DCOM ve NT Services dahil) Microsoft Office uygulamalarının Otomasyonunu önermez ve desteklemez, çünkü Office bu ortamda çalıştırıldığında kararsız davranışlar gösterebilir ve/veya kilitlenebilir.
Sunucu tarafı bağlamında çalışan bir çözüm geliştiriyorsanız, katılımsız yürütme için güvenli hale getirilmiş bileşenler kullanmaya veya en azından kodun bir parçasının istemci tarafında çalıştırılmasına olanak veren alternatifler bulmaya çalışmalısınız. Sunucu tarafı çözümünden bir Office uygulaması kullanmayı seçerseniz, başarıyla çalışabilmesi için gereken birçok beceriye sahip olmadığını görecek ve çözümünüzün genel kararlılığını riske atmış olacaksınız.
Sunucu tarafında Office Otomasyonu kullanma ile ilgili sorunlarOffice'i bir sunucu tarafı çözümünde kullanmaya çalışan geliştiriciler, çalışma ortamı nedeniyle Office'in beklenenden farklı davranacağı beş ana hususta bilgi sahibi olmalıdır. Kodunuzun başarıyla çalıştırılabilmesi için bu hususlara dikkat edilmesi ve etkilerinin mümkün olduğunca azaltılması gerekir. Uygulamanızı geliştirirken bu noktalara dikkat edin, çünkü tümüne yönelik tek bir çözüm bulunmamaktadır ve farklı tasarımlarda öğelerin önceliklerinin farklı belirlenmesi gerekir.
- Kullanıcı Kimliği: Office Uygulamaları çalıştırıldıklarında, Otomasyon yoluyla başlatılmış olsalar da bir kullanıcı kimliği kullanılmasını gerektirir. Uygulamayı başlatan kullanıcı için kayıt defteri kovanındaki ayarlara bağlı olarak araç çubuklarını, menüleri, seçenekleri, yazıcıları ve bazı eklentileri başlatmaya çalışırlar. Birçok hizmet, kullanıcı profili olmayan hesaplar altında (SYSTEM veya IWAM_[sunucuadı] hesapları gibi) çalışır ve bu nedenle de başlangıç sırasında Office düzgün başlatılamayarak CreateObject veya CoCreateInstance öğesinde bir hata döndürebilir. Office uygulaması başlatılabilse bile, bir kullanıcı profili olmadan diğer işlevler düzgün çalışmayabilir. Office Otomasyonu'nu bir hizmetten gerçekleştirmeyi planlıyorsanız, kodunuzu veya Office'i yüklü bir kullanıcı profiliyle çalışacak biçimde yapılandırmanız gerekir.
- Masaüstüyle Etkileşim: Office Uygulamaları, etkileşimli bir masaüstü altında çalıştırıldıklarını varsayar ve bazı durumlarda belirli Otomasyon işlevlerinin düzgün çalışması için görünür olmaları gerekir. Beklenmeyen bir hata oluşursa veya bir işlevi tamamlamak için gereken bir parametre belirtilmemişse, Office, kullanıcının ne yapmak istediğini soran bir kalıcı iletişim kutusu aracılığıyla kullanıcıya soracak biçimde tasarlanmıştır. Etkileşimli olmayan bir masaüstündeki kalıcı iletişim kutusu yok sayılamaz ve yok sayılırsa ilgili iş parçacığının süresiz olarak yanıt vermemesine (askıda kalmasına) neden olur. Belirli kodlama uygulamaları bu durumun oluşma olasılığının azaltılmasına yardımcı olabilse de tümüyle engelleyemez. Bu durum, Office Uygulamalarının bir sunucu tarafı ortamından çalıştırılmasını riskli hale getirir ve desteklenmemesine neden olur.
- Yeniden Kullanılabilirlik ve Ölçeklenebilirlik: Sunucu tarafı bileşenleri, birden çok istemci için en az yük ve yüksek akış verimi sağlayan, yeniden kullanılabilirliği yüksek, çok iş parçacıklı COM bileşenleri gerektirir. Office Uygulamaları bu gereksinimlerin neredeyse hiçbirini karşılayamaz. Tek bir istemci için yoğun kaynak kullanımı gerektiren çeşitli işlevler sağlayacak biçimde tasarlanmış, yeniden kullanılabilirlikleri olmayan STA tabanlı Otomasyon sunucularıdır. Sunucu tarafı çözümü olarak kısıtlı ölçeklenebilirlik seçenekleri sunarlar ve yapılandırma aracılığıyla değiştirilemeyen (bellek gibi) önemli öğelerle ilgili kısıtlamalara sahiptirler. Daha da önemlisi, aynı anda çalışabilen örnek sayısını kısıtlayan ve çok istemcili bir ortamda yapılandırılırsa yarış durumlarına neden olan genel kaynakları (bellekle eşlenen dosyalar, genel eklentiler veya şablonlar ve paylaşılan Otomasyon sunucuları gibi) kullanırlar. Aynı anda birden çok Office Uygulaması örneği çalıştırmayı planlayan geliştiricilerin, olası kilitlenmeleri veya veri bozulmalarını önlemek için Office Uygulaması'na erişimi "havuza alması" veya serileştirmesi gerekir.
- Esneklik ve Kararlılık: Office 2000, Office XP, Office 2003 ve Office 2007, son kullanıcı açısından kurulumu ve kendi kendine onarımı kolaylaştırmak için Microsoft Windows Installer (MSI) teknolojisini kullanır. MSI'da, çalışma zamanı sırasında (sistem için veya daha çok belirli bir kullanıcı için) özelliklerin dinamik olarak yüklenebilmesini ya da yapılandırılabilmesini sağlayan "ilk kullanımda yüklensin" kavramı kullanılmaya başlanmıştır. Bu özellik, bir sunucu tarafı ortamında performansı düşürmesinin yanı sıra, kullanıcıdan yükleme işlemini onaylamasını veya uygun yükleme diskini sağlamasını isteyen bir iletişim kutusunun görüntülenme olasılığını da artırır. Office'in bir son kullanıcı ürünü olarak esnekliğini artıracak biçimde tasarlanmış olmasına karşın, bir sunucu tarafı ortamında Office'in MSI özelliklerini kullanma biçimi verimliliği düşürmektedir. Üstelik, sunucu tarafında çalıştırıldığında Office'in genel olarak kararlılık düzeyi garanti edilemez, çünkü bu şekilde kullanım için tasarlanmamış veya sınanmamıştır. Office'in bir ağ sunucusunda hizmet bileşeni olarak kullanılması, ilgili makinenin ve dolayısıyla da genel olarak ağın kararlılığını düşürebilir. Sunucu tarafında Office'i otomatikleştirmeyi düşünüyorsanız, programı, kritik işlevleri etkilemeyen ve gerektiğinde yeniden başlatılabilen bir adanmış bilgisayarla yalıtmayı deneyin.
- Sunucu Tarafı Güvenliği: Office Uygulamalarının hiçbir zaman sunucu tarafında kullanılması amaçlanmadığı için, dağıtılmış bileşenler nedeniyle oluşan güvenlik sorunları da dikkate alınmamıştır. Office gelen isteklerin kimlik doğrulamasını yapmaz ve sunucu tarafı kodunuzdan istem dışı olarak makrolar çalıştırmanıza veya makro çalıştırabilecek başka bir sunucuyu başlatmanıza karşı sizi korumaz. Sunucuya anonim bir Web konumundan yüklenmiş dosyaları açmayın! Son ayarlanmış güvenlik ayarlarına bağlı olarak, sunucu makroları tam ayrıcalıkları olan bir Administrator veya System bağlamında çalıştırarak ağınızın güvenliğinin aşılmasına neden olabilir! Office, işlemleri hızlandırmak amacıyla istemci kimlik doğrulaması bilgilerini önbelleğe alabilen birçok istemci tarafı bileşeni (Basit MAPI, WinInet ve MSDAIPP gibi) de kullanır. Sunucu tarafında Office otomatikleştirilirse, bir örneği birden çok istemciye hizmet verebilir ve ilgili oturumda kimlik doğrulaması bilgileri önbelleğe alınmış olduğu için, bir istemci başka bir istemcinin önbelleğe alınmış kimlik bilgilerini kullanabilir ve böylece diğer kullanıcıların kimliğine bürünerek, kendisine atanmamış erişim izinlerine sahip olabilir.
Bu önemli sorunların yanı sıra, birçok müşteri sunucu tarafında otomasyonu denediklerinde varsayılan Office yüklemelerinde hiçbir değişiklik yapmadan aşağıdaki genel hatalardan biri alabilmektedir:
- CreateObject/CoCreateInstance, aşağıdaki çalışma zamanı hata iletilerinden birini döndürüyor ve Otomasyon için başlatılamıyor.
Microsoft Visual Basic (VB) veya ASP'de:
- İleti 1Çalışma zamanı hatası '429': ActiveX bileşeni nesneyi oluşturamıyor
- İleti 2Çalışma zamanı hatası '70': İzin verilmedi
- İleti 1CO_E_SERVER_EXEC_FAILURE (0x80080005): Sunucunun yürütme işlemi başarısız oldu
- İleti 2E_ACCESSDENIED (0x80070005): Erişim reddedildi
- İleti 1
- Bir Office belgesi açıldığında aşağıdaki hatalardan birine neden oluşur:
- İleti 1Çalışma zamanı hatası '5981' (0x800A175D): Makro deposu açılamadı
- İleti 2Çalışma zamanı hatası '1004': '~' nesnesinin '~' yöntemi başarısız oldu
- İleti 1
- CreateObject/CoCreateInstance askıda kalıyor ve hiçbir şekilde tamamlanmıyor ya da döndürülmesi uzun zaman alıyor. Bazı sunucularda, oluşturma işlemi hızla gerçekleştirilir ama Windows (NT) Event Log'da (Olay Günlüğü) 1004 hataları görülür.
Sorun genelde sunucu tarafında kod çalıştıran (sorun #2) etkileşimli olmayan bir masaüstündeki kalıcı iletişim kutusudur. İletişim kutusu bir MSI bileşeni yükleme sorunu (eksik kayıt defteri girdisi veya bozuk dosya yansıması) nedeniyle görüntüleniyorsa, yükleme noktası bulunamazsa yükleme CD'sini ister ve bir ya da birden çok bileşeni yeniden yükler (sorun #4).
- Belirli işlevler beklenmedik biçimde başarısız oluyor veya süresiz olarak askıda kalıyor.
Yazıcılar, eşlene sürücüler, OLE katıştırılmış nesneleri ve pano gibi etkileşimli olmayan (sorun #2) belirli kaynaklar kullanılamayabilir veya durumları tanımsız hale gelebilir. Aynı şekilde, bir kullanıcı profili olmadan (sorun #1), ağ kaynakları da kullanılamaz ve izinler en az düzeydedir.
- Birden çok istek veya baskı sınaması çalıştırmak, bir Office uygulamasının başlatılması ya da sonlandırılması işleminde kodun başarısız olmasına, askıda kalmasına veya çökmesine neden olabilir. Bu durumda, işlem bellekte çalışır durumda kalır ve sonlandırılamaz ya da otomatikleştirilen uygulamanın tüm örnekleri bu noktadan sonra başarısız olur.
Office uygulamaları genel kaynakları paylaştığı için (sorun #3), bir Office uygulamasına erişimin başlangıç, kapatma, yazdırma, verme ve OLE bağlantısı güncelleştirme (DDE bildirimleri dahil) gibi olaylar da dahil olmak üzere belirli eylemler için serileştirilmesi gerekir.
Sunucu tarafında çalıştırırken Otomasyon alternatiflerini kullanmaMicrosoft, geliştiricilerin sunucu tarafı çözümler geliştirmeleri gerekiyorsa Office Otomasyonu alternatifleri bulmalarını önerir. Office tasarımındaki kısıtlamalar nedeniyle, Office yapılandırmasındaki değişiklikler tüm sorunları gidermek için yeterli değildir. Microsoft, Office'in sunucu tarafında yüklü olmasını gerektirmeyen ve çoğu genel görevi Otomasyon ile karşılaştırıldığında daha verimli ve daha hızlı gerçekleştirebilen birkaç alternatif önerir. Office'i projenizde bir sunucu tarafı bileşen olarak kullanmadan önce alternatifleri göz önüne alın.
Çoğu sunucu tarafında Otomasyon görevinde belge oluşturma işlemi gerçekleştirilir. Office 2000 ve sonraki sürümleri HTML'yi bir özgün belge biçimi olarak desteklediği için, çoğu belge gerektiğinde Genişletilebilir İşaretleme Dili (XML) kullanılarak oluşturulabilir ve bir Çok Amaçlı Internet Posta Uzantıları (MIME) türü kullanılarak bir istemciye akışı sağlanarak metin Office'te görüntülenebilir. Belge gerektiğinde sunucuda yalnızca ASP kullanılarak düzenlenebilir, kaydedilebilir ve hatta sunucuya döndürülebilir. Office'in önceki sürümlerinde, diğer kolay yönetilebilen metin biçimleri (RTF gibi) kullanılarak aynı etki oluşturulabilir.
Bazı özgün ikili dosya biçimleri, Office Web Components (OWC) veya ActiveX Data Objects (ADO) kullanılarak çok daha hızlı ve ölçeklenebilir şekilde düzenlenebilir. Belge özellikleri Otomasyon olmadan görüntülenebilir veya değiştirilebilir; dosya yönetimi ve sürüm oluşturma işlemleri ise FrontPage Server Extensions (FPSE) ya da Dağıtılmış Yazma ve Sürüm Oluşturma (DAV) kullanılarak gerçekleştirilebilir. Otomasyon gerekli olduğunda, birçok görevin yükü istemciye yönlendirilerek sistemin daha kararlı ve ölçeklenebilir olması sağlanabilir; çünkü bu durumda, her kullanıcı görevi kendi ayarlarıyla kendi bağlamında çalıştıracaktır.
Bu konulardan herhangi biri ve nasıl uygulanacaklarının gösterildiği örnekler hakkında daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın: (Aşağıdaki liste, bir kısmı veya tamamı İngilizce olan içeriğe işaret eden bağlantılar içerebilir.)
Aia Software B.V.Not Bu makalede adı geçen üçüncü taraf ürünleri Microsoft'tan bağımsız şirketler tarafından üretilmektedir. Microsoft bu ürünlerin performansı veya güvenilirliği ile ilgili örtük veya başka türlü hiçbir garanti vermez.
Office'i sunucu tarafında çalışacak biçimde yapılandırmaBaşka bir çözüm kullanılamıyorsa ve sunucu tarafında Office Otomasyonu'nu kullanmaya karar verirseniz, çözümünüzün bu ortamda başarıyla çalışabilmesi için yukarıda listelenen hususların çoğunu göz önüne almalısınız. Sorunların büyük bölümü yapılandırma ile ilgili olduğu için, sunucu tarafında Office Otomasyonu'nun tüm sistemler için her durumda çalışmasını sağlayacak bir dizi adım sunulması mümkün değildir. Bazı yapılandırma ayarları diğer seçeneklerle çakışabilir ve her yaklaşımın faydaları olduğu gibi kısıtlamaları da vardır. Çalışma ortamınıza en uygun çözümü bulmak için farklı çözümler denemeniz gerekebilir.
Sunucu tarafı kodundan Office Otomasyonu için, genelde aşağıdaki görevleri gerçekleştirmeniz gerekir:
- Projenizi, Office'i yalıtacak ve kapsülleyecek biçimde tasarlayın.
- Projenizin kodunu, sorunları belirleyecek ve bunları dinamik olarak giderecek biçimde geliştirin.
- Projenizde Office tarafından kullanılacak bir kullanıcı kimliği ve profil belirleyin.
Bu nedenle, yapılacak ilk adım, sunucu tarafı tasarımınızda Office Otomasyonu kullanımını kısıtlamak ve işlemi gerektiğinde yeniden başlatılabilen, kritik olmayan bir bilgisayarla yalıtmaktır. Çağrıyı yapan bağlamı da yalıtarak, çağrıyı yapan istemci askıda kalırsa sistem hizmetlerinin genel performansını etkilememesini sağlayın. Örneğin, bir sistem iş parçacığı kullanarak doğrudan IIS içinden otomasyon sağlamayın; bunun yerine, kodu kendi iş parçacığında çalışacak biçimde yalıtarak, başarısız olursa genel IIS işlevselliğini azaltmamasını sağlayın. Ayrıca, tasarımınızın güvenlik ve kimlik doğrulaması işlemlerini nasıl zorlayacağını da göz önüne alın. Office sunucu tarafı güvenliğini zorlamadığı için, kodunuz, yalnızca ASP sayfaları ve komut dosyaları gibi "güvenilen" kod modüllerinin Office Otomasyonu uygulama örneği oluşturabilmesini ve yöntemlerini çağırabilmesini, tüm belgelerin Office tarafından açılmadan önce güvenli olduklarının doğrulanmasını sağlaması gerekir. Office uygulamaları bir sunucuda her zaman Yüksek güvenlik ayarlarıyla çalışmalıdır. Tasarımınız güvenliği zorlamıyorsa, sunucunuzu riske sokmuş olursunuz!
Tasarım belirlendikten sonra, kodunuzu sorunların engellenmesini sağlayacak ve oluşabilecek hataları işleyecek biçimde geliştirmelisiniz. Kodunuzun isteğe bağlı parametre değerlerini geçirdiğinden emin olun, çünkü eksik veya çakışan değerler bazı durumlarda Office'in kullanıcıdan daha fazla bilgi istemesine neden olabilir. Hata koşullarının normal bir şekilde işlenmesi için tüm işlevlerde hata yakalama kullanın ve özel bir ayar ile (kayıt defterinde veya INI dosyasında) açıp kapatılabilen günlük kodu kullanarak bu hataları günlüğe kaydedin. Office'ten bağımsız olarak bir hata iletişim kutusunun görüntülenmesine neden olan bir eylem gerçekleştirirseniz (örneğin, yazıcıda kağıt kalmazsa, yazdırma işlemi yazıcı sürücüsünün bir iletişim kutusu görüntülemesine neden olabilir), ilerleme durumunu izlemek üzere bir zaman aşımı iş parçacığı veya ikinci bir iş parçacığı kullanarak olası kilitlenmeleri işlemeye hazır olun. Daha fazla bilgi için, aşağıdaki Microsoft Bilgi Bankası makalesine bakın:
Program dağıtılmaya hazır olduktan sonra, Office'in sunucuda uygun bir kullanıcı bağlamında çalışmak üzere uygun şekilde yapılandırıldığından emin olun. Office bir kullanıcı profili gerektirir ve başarıyla otomatikleştirilmesi için bir kullanıcı profiliyle yüklenmesini sağlamalısınız. Sunucu tarafı ortamında çalışırken bunu üç şekilde yapabilirsiniz:
- Otomasyon yoluyla başlatılan Office uygulamasının tüm örneklerini Etkileşimli kullanıcı olarak çalışacak biçimde yapılandırın.
- Otomasyon yoluyla başlatılan Office uygulamasının tüm örneklerini belirli bir kullanıcı olarak çalışacak biçimde yapılandırın.
- Bir MTS/COM+ paketi kullanmak ve Office uygulamasının kendisini başlatan kullanıcının kimliğini devralmasına izin vermek yoluyla, kodunuzu belirli bir kullanıcı olarak çalışacak biçimde yapılandırın.
Makale No: 257757 - Son İnceleme: 19 Kas 2008 - Düzeltme: 1