2017-01-30 11 views
1

Я пытаюсь выполнить отчет SSRS в .NET Core.Аутентификация в ReportExecution2005.asmx в .NET Core

Поскольку .NET Core не позволяет добавлять ссылки на службы, вы должны использовать подключенную службу WCF для добавления ссылки на WSDL, чтобы он мог генерировать совместимый с .NET Core код. Это то, что я сделал для ReportExecution2005.asmx (SQL Server 2016, если это имеет значение).

Я попытался с помощью следующих для проверки подлинности службы:

var rsExec = new ReportExecutionServiceSoapClient(ReportExecutionServiceSoapClient.EndpointConfiguration.ReportExecutionServiceSoap, 
                new EndpointAddress("http://server/ReportServer/ReportExecution2005.asmx")) 
        { 
         ClientCredentials = 
         { 
          Windows = 
          { 
           AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation, 
           ClientCredential = new NetworkCredential("username", "password") 
          } 
         } 
        }; 

попытался также настройки Имя объекта вместо объекта Windows, но в любом случае результатом является следующая ошибка:

MessageSecurityException: The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was 'NTLM'.

Глядя на Fiddler, код не передает учетные данные.

Это код, который получил генерироваться от WSDL-

public ReportExecutionServiceSoapClient(EndpointConfiguration endpointConfiguration, System.ServiceModel.EndpointAddress remoteAddress) 
    : base(ReportExecutionServiceSoapClient.GetBindingForEndpoint(endpointConfiguration), remoteAddress) 
{ 
    this.Endpoint.Name = endpointConfiguration.ToString(); 
    ConfigureEndpoint(this.Endpoint, this.ClientCredentials); 
} 

static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials); 

Я могу ошибаться, но это не вызов метода частного ConfigureEndpoint с возражает ClientCredentials перед ClientCredentials объекта даже было установлено?

Я не вижу другого способа настройки ClientCredentials или вызова ConfigureEndpoint, так как именно вы должны аутентифицироваться? Другие конструкторы - это в основном одно и то же, кроме одного, которое берет в Binding вместо EndpointConfiguration. Есть идеи?

+0

Кроме того, я знаю, что я могу просто поставить это в .NET Framework библиотеки и ссылаться на него, но я хотел бы попробовать заставить его работать только с использованием .NET Core. – Brandon

+0

Как настроена ваша модель безопасности? Используете ли вы локальный пользователь в экземпляре ssrs для запроса ssrs? Если это так, у этого пользователя есть разрешение на это? –

+0

Другое дело - проверить конфигурацию безопасности транспорта wfc. –

ответ

0

Edit: обновить код для .NET Ядра

К сожалению, у меня нет SSRS здесь, чтобы проверить код прямо сейчас.

Но, попробуйте этот код (без проверки ошибок):

// parameters of report (if any) 
ParameterValue[] parameters = {new ParameterValue {Name = "ApontamentoID", Value = "364"}}; 

// connect to the service 
ReportExecutionServiceSoapClient webServiceProxy = 
    new ReportExecutionServiceSoapClient(
    ReportExecutionServiceSoapClient.EndpointConfiguration.ReportExecutionServiceSoap, 
    "http://report_server_url/ReportExecution2005.asmx?wsdl"); 

// logon the user 
await webServiceProxy.LogonUserAsync("username", "password", null); 

// ask for the report 
await webServiceProxy.LoadReportAsync("/report_path", null); 
await webServiceProxy.SetExecutionParametersAsync(parameters, null); 

// you can use RenderStreamRequest too 
RenderRequest request = new RenderRequest("pdf", null); 
RenderResponse response = await webServiceProxy.RenderAsync(request); 

// save to the disk 
System.IO.File.WriteAllBytes(@"c:\temp\output.pdf", response.Result); 

// logoff the user 
await webServiceProxy.LogoffAsync(); 

// close 
await webServiceProxy.CloseAsync(); 
+0

Является ли это кодом .NET Core? Я не могу поместить ReportExecutionserviceSoapClient в оператор using, потому что он не реализует IDisposable. – Brandon

+0

ОПС. Прости! теперь я прочитал, что вы используете ядро ​​.net! моя вина! Я использую NET 4.6.1. –

+0

Я обновляю код! вы можете проверить? Может быть, чего-то не хватает, но я не нашел примеров или лучшей документации (например, все о ssrs). –