İstemci uygulaması bir web hizmetini çağırdığında System.IO.FileNotFoundException hatası alıyorsunuz
Bu makale, bir ASP.NET Web uygulaması bir web hizmetini çağırdığında oluşan sorunu System.IO.FileNotFoundException
çözmenize yardımcı olur.
Orijinal ürün sürümü: ASP.NET
Özgün KB numarası: 823196
Belirtiler
ASP.NET bir web uygulamasında bir web hizmetini çağırdığınızda aşağıdaki hatayı alabilirsiniz:
System.IO.FileNotFoundException
Neden
Aşağıdaki koşullardan biri doğruysa hatayı alabilirsiniz:
Çalışan işleminin Temp dizinine okuma izinleri yoktur ve çalışan işleminin temp dizinine yazma izinleri yoktur.
Not
sınıfı,
XmlSerializer
serileştirme ve seri durumdan çıkarma gerçekleştirmek için anında kod oluşturur ve derler.XmlSerializer
derlemeyi gerçekleştirmek için Kod Belgesi Nesne Modeli'ni (CodeDom) kullanır. CodeDom derlemesi disk üzerindeki geçici dosyaları kullanır. Çalışan işleminin Temp dizininde okuma izinleri ve Temp dizinindeki yazma izinleri yoksa, Web hizmetine yapılan tüm çağrılar başarısız olur. Bu nedenle, çalışan işlemi Temp dizininde okuma izinlerini ve Temp dizininde yazma izinlerini gerektirir.Oluşturulan kodda
XmlSerializer
derleme hataları var.
Çözüm 1: Temp dizininde çalışan işlem hesabına izin atama
Bu sorunu çözmek için, ASP.NET çalışan işlem hesabının (uygulamanız Internet Information Services (IIS) 6.0'a dağıtıldıysa ASPNET hesabı veya AĞ HİzMETİ hesabı) Temp dizininde okuma ve yazma erişimine sahip olmalıdır.
Not
Kimliğe bürünme kullanıyorsanız, kimliğine bürünülen kullanıcının Temp dizininde tam erişimi olmalıdır.
Temp dizinindeki çalışan işlem hesabına gerekli izinleri atamak için şu adımları izleyin:
Windows Gezgini'nde öğesini
%windir%\temp directory
bulun.öğesine sağ tıklayın
%windir%\temp
ve Özellikler'i seçin.Özellikler penceresinde Güvenlik sekmesini seçin.
Ekle'yi seçin, SunucuAdı\ASPNET yazın ve ardından Tamam'ı seçin.
Not
ServerName değerini web sunucusunun adıyla değiştirin.
Uygulamanızı IIS 6.0'a dağıttıysanız ASPNET'iAĞ HİzMETİ ile değiştirin.
İzin Ver'in altında Tam Denetim onay kutusunu ve ardından Tamam'ı seçin.
Çözüm 2: XmlSerializer tarafından oluşturulan kodda derleyici hatalarını bulma
Derleyici tarafından oluşturulan hataları bulmak için, derleyici tarafından oluşturulan dosyaları tutmak için Web.config dosyasına bir anahtar eklemeniz gerekir. Bunu yapmak için şu adımları uygulayın:
Web.config dosyasını Not Defteri gibi bir metin düzenleyicisinde açın.
Kodun
<system.diagnostics>
bölümüne aşağıdaki gibi birXmlSerialization.Compilation
anahtar ekleyin:<configuration> <system.diagnostics> <switches> <add name="XmlSerialization.Compilation" value="4"/> </switches> </system.diagnostics> </configuration>
İstemci uygulamasını çalıştırın.
İstemci uygulaması web hizmetini çağırır.
Dizinin _tmpname.00.cs dosyasına ve _tmpname.out dosyasına sahip olduğunu
%windir%\temp
doğrulayın.oluşturulan kaynak _tmpname.00.cs dosyasıdır. _tmpname.out dosyasında derleyici hataları olmalıdır.
Not
Temp dizininde dosya yazmak için okuma izinlerini etkinleştirin ve çalışan işlem hesabına (ASPNET veya AĞ HİzMETİ) yazma
%tmpname%
izinlerini etkinleştirin.
Durum
Bu davranış tasarımdan kaynaklanır.
Davranışı yeniden oluşturma adımları
Aşağıdaki bölümlerde, davranışı yeniden oluşturma adımları hakkında bilgi sağlanır.
Web hizmeti oluşturma
Visual Studio .NET'i başlatın.
Visual C# .NET veya Visual Basic .NET kullanarak yeni bir ASP.NET Web hizmeti projesi oluşturun.
Varsayılan olarak Service1.asmx oluşturulur.
Projeyi WebServiceTemp olarak adlandırın.
Çözüm Gezgini'da Service1.asmx öğesine sağ tıklayın ve Kodu Görüntüle'yi seçin.
Service1.asmx.cs dosyasında (veya Visual Basic .NET kullanıyorsanız Service1.asmx.vb dosyasında), varsayılan
HelloWorld()
web yönteminin açıklamasını kaldırın.Derleme menüsünde Çözüm Derle'yi seçin.
İstemci web uygulaması oluşturma
Visual C# .NET veya Visual Basic .NET kullanarak yeni bir ASP.NET Web uygulaması oluşturun.
Projeyi WebAppTemp olarak adlandırın.
Çözüm Gezgini'da Başvurular'a sağ tıklayın ve Ardından Web Başvurusu Ekle'yi seçin.
Adres metin kutusuna WebServiceTemp için aşağıdaki URL'yi yazın:
http://localhost/WebServiceTemp/Service1.asmx
Git'i ve ardından Başvuru Ekle'yi seçin.
Olay kodunu açmak için WebForm1'e
Page_Load
çift tıklayın.Olay işleyicisine
Page_Load
aşağıdaki kodu ekleyin.Visual C# .NET örnek kodu
// Start an instance of the Web service client-side proxy. localhost.Service1 myProxy = new localhost.Service1(); Response.Write( myProxy.HelloWorld());
Visual Basic .NET örnek kodu
'Start an instance of the Web service client-side proxy. Dim myProxy As localhost.Service1 = New localhost.Service1() Response.Write(myProxy.HelloWorld())
Derleme menüsünde Çözüm Derle'yi seçin.
Temp dizininde izinleri ayarlama
Temp dizinindeki çalışan işlem hesabına gerekli izinleri atamak için şu adımları izleyin:
Windows Gezgini'nde dizini bulun
%windir%
.öğesine sağ tıklayın
%windir%\temp
ve Özellikler'i seçin.Özellikler penceresinde Güvenlik sekmesini seçin.
Ekle'yi seçin, SunucuAdı\ASPNET yazın ve ardından Tamam'ı seçin.
İzin Ver altında Yazma onay kutusunun seçili olmadığından emin olun ve tamam'ı seçin.
Web uygulamasını çalıştırın.
Bu makalenin Belirtiler bölümünde belirtilen hatayı alabilirsiniz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin