2017-01-04 1 views
2

Этот вопрос является продолжением до ServiceStack client compressionсжатия клиент Servicestack терпит неудачу с родовыми списков

Servicestack изначально поддерживает клиент GZIP/выкачать сжатия, так как v4.5.5

Но когда я использую DTO со свойством, что это общий список, который всегда будет иметь значение null, когда он достигнет службы. Пример ниже является модом Servicestack блок-тест, который воспроизводит проблему:

using System.Collections.Generic; 
using System.Runtime.Serialization; 

using Funq; 

using NUnit.Framework; 

using ServiceStack; 

[TestFixture] 
public class ServiceStackTest 
{ 
    private readonly ServiceStackHost appHost; 

    public ServiceStackTest() 
    { 
     appHost = new AppHost().Init().Start("http://localhost:8105/"); 
    } 

    [Test] 
    public void Can_send_GZip_client_request() 
    { 
     var client = new JsonServiceClient("http://localhost:8105/") { RequestCompressionType = CompressionTypes.GZip, }; 
     var hello = new Hello { Name = "GZIP", Test = new List<string> { "Test" } }; 

     // "Hello" has valid Test-list with one value 
     var response = client.Post(hello); 
     Assert.That(response.Result, Is.EqualTo("Hello, GZIP (1)")); 
    } 

    class AppHost : AppSelfHostBase 
    { 
     public AppHost() 
      : base(nameof(ServiceStackTest), typeof(HelloService).GetAssembly()) 
     { 
     } 

     public override void Configure(Container container) 
     { 
     } 
    } 
} 

[DataContract] 
[Route("/hello")] 
[Route("/hello/{Name}")] 
public class Hello : IReturn<HelloResponse> 
{ 
    [DataMember] 
    public string Name { get; set; } 

    [DataMember] 
    public List<string> Test { get; set; } 
} 

[DataContract] 
public class HelloResponse 
{ 
    [DataMember] 
    public string Result { get; set; } 
} 

public class HelloService : IService 
{ 
    public object Any(Hello request) 
    { 
     // "Hello" has null request.Test 
     return new HelloResponse { Result = $"Hello, {request.Name} ({request.Test?.Count})" }; 
    } 
} 

Есть ли ошибка или я что-то отсутствует?

ответ

2

Этот вопрос теперь должен быть решен с this commit, который сейчас работает, как ожидалось:

var client = new JsonServiceClient(baseUrl) 
{ 
    RequestCompressionType = CompressionTypes.GZip, 
}; 
var response = client.Post(new HelloGzip 
{ 
    Name = "GZIP", 
    Test = new List<string> { "Test" } 
}); 
response.Result //= Hello, GZIP (1) 

Это исправление теперь доступна v4.5.5 +, что теперь available on MyGet, если у вас есть существующий v4.5.5 + установлен Вас Нужно будет clear your NuGet packages cache.

+0

Очистили все кеши, но все еще не работают. Я буду ждать следующего промежуточного релиза и повторю попытку. –

+0

@MartinA он должен работать с последней версией MyGet после очистки кеша NuGet, ожидая, что следующая версия будет иметь такое же поведение. Если вы можете составить небольшой автономный пример (например, в Github), я могу убедиться, что любые другие проблемы будут устранены до следующей версии. – mythz

+1

ОК, поэтому у нас есть сервер кэша прокси-сервера nuget, который не обновлялся до «последней» версии 4.5.5. Он работает сейчас! –

Смежные вопросы