Reputation: 10128
When I create a simple ServiceStack service with a Stream in the request, I find that I am unable to access the metadata page for the service method.
The service itself appears to work (I can send a stream to http://localhost:12345/uploadStream using PostMan and I can deserialize the stream in the service method OK with a bit of extra code.)
I am using .NET Core and Servicestack...
Complete repo:
using Funq;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using ServiceStack;
using ServiceStack.Web;
using System;
using System.IO;
using System.Threading.Tasks;
namespace ServiceStackCoreTest
{
class Program
{
static void Main(string[] args)
{
IWebHost host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseUrls("http://*:12345/test/")
.Build();
host.Run();
}
}
public class Startup
{
public void ConfigureServices(IServiceCollection services){ }
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.ApplicationServices.GetService<ILoggerFactory>();
app.UseServiceStack((AppHostBase)Activator.CreateInstance<AppHost>());
app.Run((RequestDelegate)(context => (Task)Task.FromResult<int>(0)));
}
}
public class AppHost : AppHostBase
{
public AppHost() : base("Test Service", typeof(Program).GetAssembly()){ }
public override void Configure(Container container){ }
}
public class MyService : Service
{
public TestResponse Any(TestRequest request)
{
return new TestResponse();
}
}
[Route("/uploadStream", "POST", Summary = "Upload stream")]
public class TestRequest : IReturn<TestResponse>, IRequiresRequestStream
{
public Stream RequestStream { get; set; }
}
public class TestResponse{ }
}
My complete csproj (I am using Windows 10 / VS2017)...
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="1.1.1" />
<PackageReference Include="ServiceStack.Core" Version="1.0.40" />
<PackageReference Include="ServiceStack.Kestrel" Version="1.0.40" />
</ItemGroup>
</Project>
When I browse to the metadata page, I can see the list of operations, but when I click on 'XML', 'JSON' or 'JSV' next to the 'TestRequest' method, I get an error ERR_INCOMPLETE_CHUNKED_ENCODING
in chrome (Edge reports nothing), and in my output window, I see Exception thrown: 'System.MemberAccessException' in System.Private.CoreLib.ni.dll
. Oddly enough, clicking on 'CSV' gives me a metadata page.
Am I creating the service method incorrectly in my ServiceStack project?
Upvotes: 2
Views: 110
Reputation: 143339
The .NET Core package had an issue where wasn't able to create an instance of an abstract class (Stream) which should now be resolved from this commit.
This change is available from v1.0.41 *.Core
packages that are now available on NuGet.
Upvotes: 3