Feature Requests

Feature, docs and use-case samples requests for ServiceStack. If you can, focus on the end-user benefit / use-case, rather than the technical details so we can focus on the end-goal and free us to work on how best to achieve it. Features can also include supporting content, e.g. a starter project on how to use ServiceStack with another product (e.g. SS + SharePoint).

  1. first install Method not found: 'Void ServiceStack.JS.Configure()'.

    Line 7: protected void Application_Start(object sender, EventArgs e)
    Line 8: {
    Line 9: new AppHost().Init();
    Line 10:
    Line 11: }

    1 vote
    Vote

    We're glad you're here

    Please sign in to leave feedback

    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Flag idea as inappropriate…  ·  Admin →
  2. Add ".wasm" to AllowFileExtensions and associate MimeType "application/wasm"

    WebAssembly is a new binary format for static files. The official site has more info. https://webassembly.org/

    Google for webassembly mimetype w3c will return many results showing the addition of this file extension and Mimetype in other mainstream servers.

    1 vote
    Vote

    We're glad you're here

    Please sign in to leave feedback

    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Flag idea as inappropriate…  ·  Admin →
  3. Add ".dll" to AllowFileExtension, and add dll => "application/octet-stream" MimeTypes

    The new WebAssembly feature being added to mainstream browsers will download .dll files to the browser. To make it possible to serve static .dll fiiles by default, please add .dll files as mimeType application/octet-stream, and allow these types of files by default.

    1 vote
    Vote

    We're glad you're here

    Please sign in to leave feedback

    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Flag idea as inappropriate…  ·  Admin →
  4. Add SqlListLazy to OrmLite

    When using raw SQL, due to having complex CTE queries, that does not start with SELECT but rather with WITH, the SqlList method loads everything in one go.
    This is unfortunate when the result set is large, and we would like to process one row at a time, and avoid the memory overhead, and waiting time, of getting the whole result set at once.

    The SelectLazy would have solved this problem, if it had supported any arbitrary SQL, but it does not.
    According to the documentation SelectLazy can do this if the SQL starts with SELECT however, for our…

    1 vote
    Vote

    We're glad you're here

    Please sign in to leave feedback

    Signed in as (Sign out)
    You have left! (?) (thinking…)
    0 comments  ·  Flag idea as inappropriate…  ·  Admin →
  5. mix alias <name> <url>

    Would be nice to specify easy to remember alias for custom gist.

    1 vote
    Vote

    We're glad you're here

    Please sign in to leave feedback

    Signed in as (Sign out)
    You have left! (?) (thinking…)
    3 comments  ·  Flag idea as inappropriate…  ·  Admin →
  6. Expose cancellable async methods in clients through an interface

    IHttpRestClientAsync exposes various method-specific async methods as well as SendAsync.

    SendAsync has a cancellation token parameter in its signature:

    Task<TResponse> SendAsync<TResponse>(string httpMethod, string absoluteUrl, object request, CancellationToken token = default);
    

    while other methods (GetAsync, PostAsync etc) don't

    https://github.com/ServiceStack/ServiceStack/blob/6366ba9316d1380b920cd854042bef8649f630c5/src/ServiceStack.Interfaces/IHttpRestClientAsync.cs

    Implementations of IHttpRestClientAsync (like JsonHttpClient) do have the methods which support then token:

        public Task<TResponse> GetAsync<TResponse>(IReturn<TResponse> requestDto, CancellationToken token) =>
            SendAsync<TResponse>(HttpMethods.Get, ResolveTypedUrl(HttpMethods.Get, requestDto), null, token);
    

    https://github.com/ServiceStack/ServiceStack/blob/9de810436e0a589be002dff5bdfcf203081e6a0b/src/ServiceStack.HttpClient/JsonHttpClient.cs#L699

    and in fact all the method-specific implementations just call SendAsync under the hood.

    Without token-aware methods exposed through an interface I cannot use them in a depencency-injected IServiceClient and its derivatives. They are only usable if…

    1 vote
    Vote

    We're glad you're here

    Please sign in to leave feedback

    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Flag idea as inappropriate…  ·  Admin →

    Yeah the clients async interfaces weren’t ideal, it started from the initial impl of the .NET WebRequest clients being implemented using the older APM model which didn’t use them. Other implementations just kept the same API.

    Anyway since it’s a source-compatible change (will require a rebuild after upgrade), I’ve added an optional CancellationToken to all Async Service Client APIs in this commit:

    https://github.com/ServiceStack/ServiceStack/commit/dc6a281e80987b522c218bc82ce9cfefb111ea86

    This change is now available from v5.8.1 that’s now available on MyGet:

    https://docs.servicestack.net/myget

  7. Replace System.IO.MemoryStream with Microsoft.IO.RecycableMemoryStream

    Refer to http://www.codeproject.com/Articles/873615/Announcing-Microsoft-IO-RecycableMemoryStream

    Quote:
    Microsoft.IO.RecyclableMemoryStream is a MemoryStream replacement that offers superior behavior for performance-critical systems. In particular it is optimized to do the following:

    Eliminate Large Object Heap allocations by using pooled buffers
    Avoid memory leaks by having a bounded pool size
    Avoid memory fragmentation
    Provide excellent debuggability
    Provide metrics for performance tracking
    
    0 votes
    Vote

    We're glad you're here

    Please sign in to leave feedback

    Signed in as (Sign out)
    You have left! (?) (thinking…)
    2 comments  ·  Flag idea as inappropriate…  ·  Admin →
  8. pagination bug mssql

    We have a view:

    CREATE VIEW StockInformation AS SELECT dbo.Product.Code AS ItemCode, dbo.Warehouse.Code AS WarehouseCode, dbo.StockIndicator.Code AS StockIndicatorCode, dbo.Stock.StockOnShelve, dbo.Stock.StockAvailable,
    dbo.Stock.StockPurchaseBackorder, dbo.Stock.StockFirstPurchaseDeliveryDate
    FROM dbo.Stock INNER JOIN
    dbo.Warehouse ON dbo.Stock.WarehouseID = dbo.Warehouse.WarehouseID INNER JOIN
    dbo.StockIndicator ON dbo.Stock.StockIndicatorID = dbo.StockIndicator.StockIndicatorID RIGHT OUTER JOIN
    dbo.Product ON dbo.Stock.ProductID = dbo.Product.ProductID

    and the following query:

    var stocks = con.Select<StockInformation>(con.From<StockInformation>().OrderBy(x=> x.ItemCode).Limit(pageSize * pageNumber, pageSize));

    The first page results into query:

    SELECT TOP [pageSize] ... FROM StockInformation.

    The second query looks like this:

    SELECT * FROM (SELECT "ItemCode", "WarehouseCode", "StockIndicatorCode", "StockOnShelve", "StockAvailable", "StockPurchaseBackorder", "StockFirstPurchaseDeliveryDate", ROW_NUMBER() OVER (ORDER BY "StockInformation"."ItemCode") As RowNum

    FROM "StockInformation") AS RowConstrainedResult WHERE RowNum…

    0 votes
    Vote

    We're glad you're here

    Please sign in to leave feedback

    Signed in as (Sign out)
    You have left! (?) (thinking…)
    1 comment  ·  Flag idea as inappropriate…  ·  Admin →
1 2 3 4 5 7 Next →
  • Don't see your idea?

Feature Requests

Categories

Feedback and Knowledge Base