2011-11-09 3 views
18

Lỗi: Không thể tạo lớp tạm thời (kết quả = 1) ... Khi gọi phương thức trên dịch vụ web. Tôi đang sử dụng VS 2008 C# ASP.NET 3.5. Tôi đang gọi một dịch vụ web từ xa đến ứng dụng của mình.Lỗi: Không thể tạo lớp tạm thời (kết quả = 1) ... Khi gọi phương thức trên dịch vụ web

Server Error in '/' Application. 
Server was unable to process request. ---> Unable to generate a temporary class (result=1). 
error CS2001: Source file 'C:\WINDOWS\TEMP\6sbkwt2d.0.cs' could not be found 
error CS2008: No inputs specified 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> Unable to generate a temporary class (result=1). 
error CS2001: Source file 'C:\WINDOWS\TEMP\6sbkwt2d.0.cs' could not be found 
error CS2008: No inputs specified 


Source Error: 

Line 775:  [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/CheckLogin", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] 
Line 776:  public System.Data.DataSet CheckLogin(string uname, string pswd) { 
Line 777:   object[] results = this.Invoke("CheckLogin", new object[] { 
Line 778:      uname, 
Line 779:      pswd}); 


Source File: c:\windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\14127ae4\96323535\App_WebReferences.u9ldrmk1.0.cs Line: 777 
+1

Bạn có thể vui lòng cho chúng tôi biết một số mã không? Bạn gọi dịch vụ web như thế nào? Giao diện webservices là gì? Bạn cũng có mã cho chức năng webservice mà bạn đang gọi? –

+0

bản sao có thể có của [System.InvalidOperationException: Không thể tạo một lớp tạm thời (kết quả = 1)] (http://stackoverflow.com/questions/657993/system-invalidoperationexception-unable-to-generate-a-temporary-class- result-1) – V4Vendetta

+0

@Wouter Mã gọi điện thoại web của tôi như sau: return objWEB.CheckLogin (tên người dùng, mật khẩu); Tôi đã bao gồm không gian tên tha bằng cách sử dụng WebReference; và tạo đối tượng webservice (objWEB) WebReference.Service objWEB = new WebReference.Service(); –

Trả lời

34

Đầu tiên, tín dụng nơi tín dụng đến hạn. OP giải quyết vấn đề này và trả lời nó trong phần bình luận của câu hỏi. Tuy nhiên, tôi hiểu rằng nhiều người đến với StackOverflow và sẽ đọc qua câu hỏi và không xem xét các nhận xét. Vì vậy, tôi đang chuyển tiếp câu trả lời ở trên tại đây. Hãy chắc chắn bỏ phiếu nếu câu hỏi này hữu ích.

Sự cố này xảy ra vì tài khoản được liên kết với nhóm ứng dụng dịch vụ web của bạn trong IIS không có quyền đọc/ghi đối với thư mục C:\Windows\Temp. Tôi không có đầu mối tại sao tài khoản cần truy cập vào thư mục này, nhưng nó có. Từ quan sát bình thường của tôi có vẻ như nó chỉ viết một tập tin rỗng với một tên ngẫu nhiên vào thư mục Temp.

Để giải quyết sự cố này, hãy duyệt đến thư mục C:\Windows và nhấp chuột phải vào thư mục Temp. Chọn Thuộc tính và trên Tab bảo mật thêm tài khoản được liên kết với nhóm ứng dụng dịch vụ web của bạn. Nhấn nút OK, chuyển đến IIS và tái chế nhóm ứng dụng của bạn. Điều này sẽ khắc phục yêu cầu dịch vụ web của bạn.

Cần lưu ý rằng các trường hợp xung quanh lỗi này có thể là một chút lừa đảo. Tôi đã gặp vấn đề này một vài lần trong hơn 5 năm. (Tôi đã quên nó mỗi lần.) Lý do tại sao nó không đáng chú ý là vì bạn có thể xuất bản một dịch vụ web, duyệt thành công tới trang asmx được liên kết và xem đường viền của các phương thức dịch vụ web của bạn. Hơn nữa, dự án Visual Studio của bạn có thể thêm tham chiếu đến Dịch vụ Web và Visual Studio sẽ tự động tạo tất cả các lớp được liên kết cho dịch vụ web trong dự án VS của bạn.

Điều này mang lại ấn tượng rằng mọi thứ đang hoạt động bình thường cho đến khi bạn thực hiện yêu cầu đầu tiên của mình để thực thi một phương thức trên dịch vụ web. Dịch vụ web sẽ thất bại khi nó bắt đầu thực thi mã vì nó muốn truy cập vào thư mục temp.

Thông tin thêm về lỗi này có thể được tìm thấy tại số bug report được xác nhận tại Microsoft.com.

0

Điều đó xảy ra khi trang web của bạn không hoạt động với Hồ bơi ứng dụng "DefaultAppPool" và bạn đã chọn hồ bơi riêng của mình. Trong trường hợp đó, bạn cần phải thêm người dùng với tên của hồ bơi của bạn.