Использование аутентификации SQL Server для подключения к SSRS из приложения WinForms - PullRequest
0 голосов
/ 25 июня 2018

Я занят тестированием SSRS, чтобы выяснить, является ли это жизнеспособной альтернативой нашему текущему решению для создания отчетов.Я установил SSRS на своем локальном компьютере и разработал рабочий отчет с помощью построителя отчетов SQL Server.Теперь я пытаюсь вызвать отчет из приложения WinForms и отобразить его в элементе управления ReportViewer.Проблема в том, что я настроил SQL Server для использования аутентификации SQL Server, и я изо всех сил пытаюсь выяснить, как подключиться к нему программно.

Код, который я собрал до сих пор, выглядит следующим образом:

Imports Microsoft.Reporting.WinForms

Public Class frmMain
Public v_report_name As String = "TestReport"
Public v_report_server As String = "http://elnah-ict-dt006:80"
Public v_report_path As String = "/reports_SSRS/"

Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    'create parameter array
    Dim paramlist As New List(Of Microsoft.Reporting.WinForms.ReportParameter)

    'create a specific parameter required by the report
    Dim param1 As New Microsoft.Reporting.WinForms.ReportParameter("ClientID")

    'add values to the parameter here we use a variable that holds the parameter value
    param1.Values.Add("0279")

    'add parameter to array
    paramlist.Add(param1)

    'Set the processing mode for the ReportViewer to Remote  
    ReportViewer1.ProcessingMode = ProcessingMode.Remote

    'use the serverreport property of the report viewer to select a report from a remote SSRS server
    ReportViewer1.ServerReport.ReportServerUrl = New System.Uri(v_report_server)
    ReportViewer1.ServerReport.ReportPath = v_report_path & v_report_name
    'select where the report should be generated with the report viewer control or on the report server using the SSRS service.
    'Me.ReportViewer1.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Remote

    'add the parameterlist to the viewer
    ReportViewer1.ServerReport.SetParameters(paramlist)


    Me.ReportViewer1.RefreshReport()
End Sub
End Class

Когда он достигает линии SetParameters внизу, он получает следующее сообщение об ошибке:

Microsoft.Reporting.WinForms.Internal.Soap.ReportingServices2005.Execution.RSExecutionConnection.MissingEndpointException HResult = 0x80131500 Сообщение = Попытка подключения к серверу отчетов не удалась.Проверьте информацию о соединении и убедитесь, что сервер отчетов является совместимой версией.Source = Microsoft.ReportViewer.WinForms

Я пытался найти примеры того, как установить имя пользователя и пароль, но из того, что я могу сказать, большинство примеров сосредоточено на использовании аутентификации Windows.Я пробовал следующую строку, но она не работает:

ReportViewer1.ServerReport.ReportServerCredentials = New ReportServerCredentials("SA", "mypassword")

Я не работал в VB.NET целую вечность, поэтому, пожалуйста, извините за любые очевидные ошибки.

1 Ответ

0 голосов
/ 25 июня 2018

Вот некоторый код из проекта Web Forms, в котором я недавно работал в команде:

private void SetCredentials()
{
    var userName = ConfigurationManager.AppSettings["SSRSUserName"];
    var passwordEncrypted = ConfigurationManager.AppSettings["SSRSUserPasswordEncrypted"];
    var passwordPlainText = SI.Crypto3.Crypto.Decrypt(passwordEncrypted, PASSPHRASE);
    var domain = ConfigurationManager.AppSettings["SSRSUserDomain"];

    if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(passwordPlainText) && !string.IsNullOrEmpty(domain))
    {
        this.EventsHubReportViewer.ServerReport.ReportServerCredentials = new ReportServerCredentials(userName, passwordPlainText, domain);
    }
}

Это C #, но, надеюсь, вы видите, что важная часть - это последняя строка.Я думаю, что эквивалент в вашем случае должен быть:

ReportViewer1.ServerReport.ReportServerCredentials = New ReportServerCredentials(userName, password, domain)

Значение domain может быть пустым String, если вы находитесь в том же домене, что и сервер.

EDIT:

Я посмотрел более внимательно, и класс ReportServerCredentials, который использует код, является нашим собственным.В вашем случае вы можете использовать класс Microsoft.ReportViewer.WinForms.ReportServerCredentials, который, я думаю, не имеет такого конструктора.Просмотр документации для свойства NetworkCredentials этого типа показывает, что вам нужно сделать следующее:

Dim credentials As New NetworkCredential(userName, password, domain)

ReportViewer1.ServerReport.ReportServerCredentials.NetworkCredentials = credentials
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...