views:

23

answers:

1

Question: I have written a console program that uses the SQL server 2005 web service to upload reports to SQL Server 2005 reporting service (so that I don't have to upload 100 reports by hand everytime).

It works fine locally, and remotely. But now, the problem is one server uses SSL so rs.Url = "https://hostname/ReportServer/reportservice2005.asmx

the problem now is the SSL certificate is invalid... I can access the reportserver from the browser however by ignoring this error. How can I do that with the webservice?

 ' 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
+2  A: 

You can do this by registering a delegate with ServicePointManager.ServerCertificateValidationCallback that returns true. If the delegate returns true all certificates (valid as well as invalid) will be accepted. Also see this example on how you may do this.

Jakob Christensen
Just needed to add this line: System.Net.ServicePointManager.ServerCertificateValidationCallback = Function() True
Quandary