Реализация ошибки IReportServerCredentials - PullRequest
2 голосов
/ 11 мая 2011

Я взял пример кода для реализации IReportServerCredentials для отправки информации для входа в систему для удаленного получения отчета, но по какой-то причине реализация подвержена ошибкам.

 Imports System.Net
 Imports Microsoft.Reporting.WebForms
 Imports System.Security.Principal


   <Serializable()> _
  Public NotInheritable Class ReportServerNetworkCredentials
   Implements IReportServerCredentials


#Region "IReportServerCredentials Members"


''' <summary>
''' Specifies the user to impersonate when connecting to a report server.
''' </summary>
''' <value></value>
''' <returns>A WindowsIdentity object representing the user to impersonate.</returns>
Public ReadOnly Property ImpersonationUser() As WindowsIdentity Implements IReportServerCredentials.ImpersonationUser
    Get
        Return Nothing
    End Get
End Property

''' <summary>
''' Returns network credentials to be used for authentication with the report server.
''' </summary>
''' <value></value>
''' <returns>A NetworkCredentials object.</returns>
Public ReadOnly Property NetworkCredentials() As System.Net.ICredentials Implements IReportServerCredentials.NetworkCredentials
    Get

        dim userName As String = _
            ConfigurationManager.AppSettings("MyReportViewerUser")

        If (String.IsNullOrEmpty(userName)) Then
            Throw New Exception("Missing user name from web.config file")
        End If

        Dim password As String = _
            ConfigurationManager.AppSettings("MyReportViewerPassword")

        If (String.IsNullOrEmpty(password)) Then
            Throw New Exception("Missing password from web.config file")
        End If

       Dim domain As String = _
            ConfigurationManager.AppSettings("MyReportViewerDomain")

        If (String.IsNullOrEmpty(domain)) Then
            Throw New Exception("Missing domain from web.config file")
        End If


        Return New System.Net.NetworkCredential(userName, password, domain)
    End Get
End Property

''' <summary>
''' Provides forms authentication to be used to connect to the report server.
''' </summary>
''' <param name="authCookie">A Report Server authentication cookie.</param>
''' <param name="userName">The name of the user.</param>
''' <param name="password">The password of the user.</param>
''' <param name="authority">The authority to use when authenticating the user, such as a Microsoft Windows domain.</param>
''' <returns></returns>
Public Function GetFormsCredentials(ByVal authCookie As System.Net.Cookie, ByVal userName As String, ByVal password As String, ByVal authority As String) As Boolean Implements IReportServerCredentials.GetFormsCredentials
    authCookie = Nothing
    userName = Nothing
    password = Nothing
    authority = Nothing

    Return False
End Function

# Конечный регион

Конечный класс

в объявлении класса есть строка ошибки для

 Implements IReportServerCredentials

и он говорит, что класс должен реализовывать функцию getformscredentials .... для интерфейса microsoft.reporting.webforms.ireportservercredentials ...

Теперь, когда я соответственно изменяю функцию, она все равно выдает ту же ошибку.

1 Ответ

1 голос
/ 11 июня 2011

Я предполагаю, что это полное сообщение об ошибке:

'Открытая функция GetFormsCredentials (authCookie As System.Net.Cookie, userName As String, пароль As String, полномочия As String) As Boolean'и' Открытая функция GetFormsCredentials (ByRef authCookie как System.Net.Cookie, ByRef userName как String, ByRef пароль как String, ByRef authorиться как String) Как Boolean «не может перегрузить друг друга, поскольку они отличаются только параметрами, объявленными« ByRef »или«ByVal '.

В разделе Синтаксис документов MSDN для IReportServerCredentials.GetFormsCredentials вы видите этот пример кода для объявления.

'Declaration

Function GetFormsCredentials ( _
    <OutAttribute> ByRef authCookie As Cookie, _
    <OutAttribute> ByRef userName As String, _
    <OutAttribute> ByRef password As String, _
    <OutAttribute> ByRef authority As String _
) As Boolean

Ваша функцияВ объявлении отсутствует ключевое слово ByRef и атрибут OutAttribute для каждого параметра.Атрибут ByRef указывает компилятору VB.NET передать значение параметра обратно вызывающей стороне.OutAttribute сообщает компилятору, создающему вызывающий код, что ему не нужно инициализировать параметр перед его передачей. Вы можете найти дополнительную информацию о выходных параметрах из статьи Directional Attributes в MSDN, а также этот полезный ответот Лассе В. Карлсена на вопрос StackOverflow о Attribute. What useful purpose does is serve?">атрибут .

Атрибут OutAttribute объявлен в пространстве имен System.Runtime.InteropServices, поэтому вам понадобится этот оператор Import в верхней части вашего файла.

Imports System.Runtime.InteropServices

Ваша функция должнабольше похоже на это:

Public Function GetFormsCredentials(<OutAttribute()> ByRef authCookie As System.Net.Cookie, <OutAttribute()> ByRef userName As String, <OutAttribute()> ByRef password As String, <OutAttribute()> ByRef authority As String) As Boolean Implements IReportServerCredentials.GetFormsCredentials
    authCookie = Nothing
    userName = Nothing
    password = Nothing
    authority = Nothing

    Return False
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...