Как игнорировать ошибку сертификата SSL в запросе WebService? - PullRequest
3 голосов
/ 24 сентября 2010

Вопрос. Я написал консольную программу, которая использует веб-службу SQL Server 2005 для загрузки отчетов в службу отчетов SQL Server 2005 (чтобы мне не приходилось каждый раз загружать 100 отчетов вручную).

Работает нормально локально и удаленно. Но теперь проблема в том, что один сервер использует SSL so rs.Url = "https://hostname/ReportServer/reportservice2005.asmx

проблема в том, что сертификат SSL недействителен ... Однако я могу получить доступ к серверу отчетов из браузера, игнорируя эту ошибку. Как я могу сделать это с веб-сервисом?

 ' http://msdn.microsoft.com/en-us/library/aa225813(SQL.80).aspx
    ' COR.Reporting.ReportingServiceInterface.CreateThisReport(strFileNameAndPath, strReportName, strReportingPath)
    ' COR.Reporting.ReportingServiceInterface.CreateThisReport("c:\path\to\file\xy.rdl", "xy", "/COR")
    Public Shared Sub CreateThisReport(ByVal strFileNameAndPath As String, ByVal strReportName As String, ByVal strReportingPath As String, Optional ByVal bOverwrite As Boolean = True)
        Dim rs As ReportingService2005 = New ReportingService2005
        rs.Credentials = ReportingServiceInterface.GetMyCredentials(strCredentialsURL)
        rs.Timeout = ReportingServiceInterface.iTimeout
        rs.Url = ReportingServiceInterface.strReportingServiceURL


        Dim btBuffer As Byte() = Nothing

        Dim rsWarnings As Warning() = Nothing
        Try
            Dim fstrStream As System.IO.FileStream = System.IO.File.OpenRead(strFileNameAndPath)
            btBuffer = New [Byte](fstrStream.Length) {}
            fstrStream.Read(btBuffer, 0, CInt(fstrStream.Length))
            fstrStream.Close()
        Catch ex As System.IO.IOException
            Throw New Exception(ex.Message)
        End Try


        Try
            rsWarnings = rs.CreateReport(strReportName, strReportingPath, bOverwrite, btBuffer, Nothing)

            If Not (rsWarnings Is Nothing) Then
                Dim warning As Warning
                For Each warning In rsWarnings
                    Console.WriteLine(warning.Message)
                Next warning
            Else
                Console.WriteLine("Report: {0} created successfully with no warnings", strReportName)
            End If

        Catch ex As System.Web.Services.Protocols.SoapException
            Console.WriteLine(ex.Detail.InnerXml.ToString())
        End Try
    End Sub ' End Function CreateThisReport

1 Ответ

8 голосов
/ 24 сентября 2010

Вы можете сделать это, зарегистрировав делегата с ServicePointManager.ServerCertificateValidationCallback, который возвращает true.Если делегат возвращает true, все сертификаты (действительные и недействительные) будут приняты.

...