2013-09-23 63 views
7

tôi có:ReportingService2010 không thể tìm được

private readonly ReportingService2010 _rs = new ReportingService2010();

Lỗi:

The type or namespace name 'ReportingService2010' could not be found (are you missing a using directive or an assembly reference?) 

tôi setup một tham chiếu đến các dịch vụ SSRS. Tham chiếu không cấp cho tôi quyền truy cập vào ReportingService2010 như tôi mong đợi. Điều gần nhất là:

MySsrsServiceNamespace.ReportingService2010SoapClient

Làm sao tôi phải sử dụng lớp ReportingService2010? MSDN liệt kê lớp này một cách mơ hồ.

Xin lưu ý rằng tôi đã thử sử dụng ReportingService2010SoapClient. Lớp này không khớp với tài liệu cho ReportingService2010. Ví dụ: ListChildren() chỉ chấp nhận 4 tham số và thuộc tính Url không tồn tại.

Trả lời

5

Tạo lớp proxy và đưa nó vào ứng dụng của bạn hoặc thêm tham chiếu web vào ReportingService. Các hướng dẫn có sẵn ở đó:

http://technet.microsoft.com/en-us/library/ms155134.aspx

Lưu ý rằng nếu bạn đang cho lớp proxy và bạn đang sử dụng nhiều hơn một thiết bị đầu cuối (ReportExecution, ReportingService), bạn nên tạo ra các lớp proxy trên không gian tên khác nhau, nếu không bạn sẽ nhận được đụng độ.

Bạn đã làm điều đó bằng tham chiếu web chưa? Nếu vậy, hãy thử sử dụng WSDL tại dòng lệnh. Cú pháp dòng lệnh:

wsdl /language:CS /n:"Microsoft.SqlServer.ReportingServices2010" http://serverName/reportserver/ReportService2010.asmx?wsdl 
+0

Tôi đã làm điều này. Lớp proxy có thể được tạo bằng cách thêm một tham chiếu đến một dịch vụ web trong studio trực quan. Đó là cách tôi đã làm nó và nơi 'ReportingService2010SoapClient' xuất phát từ đó. –

+0

Tôi cũng đã thử thêm ReportingService2010 vào một lớp khác trong trường hợp có xung đột không gian tên. Vẫn không đi. –

+0

Bạn đã làm điều đó bằng cách tham khảo web? Nếu vậy, hãy thử sử dụng WSDL - Tôi thực sự không thể giúp bạn với việc thêm các tham chiếu trong VS, bởi vì tôi chỉ có kinh nghiệm với việc sử dụng các lớp proxy trong khu vực của các điểm cuối SSRS. – kyooryu

0

Thay đổi điều này;

private readonly ReportingService2010 _rs = new ReportingService2010() 

để

private readonly ReportingService2010SoapClient _rs = new ReportingService2010SoapClient() 

Bạn đang cố gắng tạo ra một ví dụ để một lớp học mà không tồn tại và bổ sung thêm các tài liệu tham khảo tạo ra một tương ứng * lớp khách hàng để bạn có thể nhanh chóng.

+0

' ReportingService2010Client' cũng không tồn tại. Điều gần nhất tôi có là 'ReportingService2010SoapClient' ... –

+0

Cập nhật câu trả lời cho phù hợp – ChrisBint

+0

Tôi đã thử điều này trước đó. Các lớp học không khớp. Ví dụ, 'ListChildren()' chấp nhận hai tham số trong phiên bản NON-soap. Phiên bản xà phòng muốn có 4 tham số. http://technet.microsoft.com/en-us/library/reportservice2010.reportingservice2010.listchildren.aspx –

21

Chỉ cần chạy vào cùng một vấn đề. Lớp ReportingService2010SoapClient đã có sẵn, nhưng lớp ReportingService2010 thì không. Đã lái xe cho tôi hạt. Tôi đã thêm nó như là một "Dịch vụ Tài liệu tham khảo", nhưng bạn cần phải thêm nó như là một "Web Tài liệu tham khảo", như vậy:

  1. Xóa dịch vụ tham khảo cũ của bạn

  2. Nhấp chuột phải vào tài liệu tham khảo. Hộp thoại "Thêm tham chiếu dịch vụ" xuất hiện.

  3. Không nhập URL WSDL bây giờ, thay vào đó: Nhấp vào nút "Nâng cao" ở dưới cùng bên trái.

  4. Hộp thoại "Cài đặt tham chiếu dịch vụ" xuất hiện.

  5. Ở dưới cùng bên trái, nhấp vào nút "Thêm tham chiếu web".

  6. Bây giờ hãy nhập URL cho WSDL. (đối với tôi đó là servername/ReportServer/ReportService2010.asmx)

  7. Nhấp vào mũi tên nhỏ ở bên phải, nó sẽ mất thời gian ngọt ngào để tải.

  8. Tên tài liệu tham khảo web, tôi đã sử dụng "ReportingService2010WebReference", nhưng ReportingService2010" có lẽ hoạt động giống như tốt.

  9. Bấm "Add Reference"

  10. Trong code của bạn, cập nhật báo cáo sử dụng của bạn để " sử dụng .ReportingService2010WebReference (hoặc bất kỳ tên nào bạn chọn)

Code:

private MySol.ReportService2010WebReference.ReportingService2010 rsClient; 

rsClient = new ReportingService2010(); 
rsClient.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials; 

CatalogItem[] items = null; 

items = rsClient.ListChildren("/", false); 

foreach (var item in items) 
{ 
    tr.ErrorMessage += (item.Path + " " + item.CreatedBy); 
} 

Làm việc trong lần thử đầu tiên. Tệp Web.config không được chạm vào.

+5

Bạn xứng đáng được giải Nobel Hòa bình hay một cái gì đó ... – werdsackjon

+0

Ông ấy có phiếu bầu của tôi. Cám ơn vì cái này. Vấn đề duy nhất tôi có là khi tôi thêm vào các tài liệu tham khảo web dự án của tôi không còn có thể sử dụng đúng thư viện System.ServiceProcess. Đối với một số lý do thay đổi phiên bản khung cho cái gì khác sau đó lại một lần nữa cố định nó. –

+0

Bằng cách này là hợp lý. Tôi sử dụng điều này và thêm tài liệu tham khảo web. Cảm ơn bạn. – tonymiao

1

Đừng thêm một Webreference

Thực hiện theo các bước sau đây và nó sẽ chỉ làm việc tốt.

1) Đảm bảo bạn có .netframework> = 4.6.1

2) Chạy command prompt as administrator

3) cd C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10 .0A \ bin \ NETFX 4.6.1 Công cụ

4) Tạo lớp: wsdl/proxyusername: Tên đăng nhập/proxypassword: Mật khẩu out: Reportingservice2010.cs http://Servername/Reportserver/ReportService2010.asmx?wsdl

bổ sung) Chạy wsdl /? để được giúp đỡ tập tin sẽ đưa ra trong: C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6.1 Công cụ

5) Thêm cs nộp để dự án của bạn

+0

Đây phải là nhận xét chứ không phải là câu trả lời. Nếu đó là câu hỏi trùng lặp, [bỏ phiếu để đóng] (http://stackoverflow.com/help/privileges/close-questions) như vậy và/hoặc để lại nhận xét khi bạn [kiếm được] (http: //meta.stackoverflow .com/q/146472/169503) đủ [danh tiếng] (http://stackoverflow.com/help/whats-reputation). Nếu nó không phải là một bản sao chính xác, hãy điều chỉnh câu trả lời để phù hợp với câu hỏi cụ thể này. –

+0

@ XaviLópez Tôi sẽ đóng nó và để lại bản sửa lỗi ở đây –

+0

@ XaviLópez đã sửa –