0

我的应用程序对路由 /{Lang}/cook 进行 AJAX 调用以检索呈现的 Razor 部分。

在通过 Cassini 的 VS2012 中,我能够得到响应;

但是,在 Xamarin 4.2.3(内部版本 60)中,我收到以下错误:加载资源失败:服务器响应状态为 405(NotImplementedException)

http://127.0.0.1:8080/en-us/cook

任何想法为什么该路线在一个 IDE 中有效,但在另一个 IDE 中无效?

我正在使用带有内存缓存的 Service Stack 4.0.12.0。系统正在免费/评估模式下运行。

这是一个使用缓存的服务方法:

公共类ScenarioService内部:Service

[DefaultView("cook")]
public object Get(CookScenario request)
{
    var cacheKey = GetCacheKey ("cook", request.Lang);

    return base.Request.ToOptimizedResultUsingCache (base.Cache, cacheKey, () => {
        CookScenarioResponse response = LoadJson<CookScenarioResponse>(request.Lang, "cook");
        return response;
    });
}

AppHost.cs内部

public override void Configure(Funq.Container container)
{
    //Set JSON web services to return idiomatic JSON camelCase properties
    ServiceStack.Text.JsConfig.EmitCamelCaseNames = true;

    //Configure User Defined REST Paths

    container.Register<ICacheClient>(new MemoryCacheClient());

    this.GlobalRequestFilters.Add((request, response, requestDto) =>
    {

         var localizedReq = requestDto as LocalizedRequest;
         if (localizedReq != null)
         {
             Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentUICulture = new CultureInfo(localizedReq.Lang);
         }

    });
    Plugins.Add(new RazorFormat());

}

编辑: 我尝试删除 ToOptimizedResultUsingCaching 并且“/en-us/cook”的服务运行良好;因此,该问题绝对是 Mac OS 10.7.5 上 Xamarin Studio 4.2.3(内部版本 60)上 Service Stack 4.0.12.0 中的 ToOptimizedResultUsingCaching 的问题。

这是单声道版本信息:Mono JIT 编译器版本 3.2.6 ((no/9b58377 Thu Jan 16 17:49:56 EST 2014)

决议 2014 年 3 月 27 日下午 1 点 PST

在我获取 ServiceStack 的预发布版本 (4.0.16) 后,我能够确认内存缓存现在可以在 Xamarin 4.2.3 (build 60) 上针对我的 Macbook pro 笔记本电脑 (OSX 10.7.5) 运行。

再次感谢您的帮助!

4

1 回答 1

2

我相信您看到的错误是 Mono 的缺点,以及 Xamarin Studio 使用的 XSP/fastcgi-server-4 主机。

我以前遇到过ToOptimizedResult/ToOptimizedResultUsingCache方法不起作用的相同问题,因为它们依赖于System.Web.HttpContextWrapper.GetService尚未在 Mono 中实现的调用。

有关 Mono 源代码,请参见此处:

public class HttpContextWrapper : HttpContextBase
{
    ...

    [MonoTODO]
    public override object GetService (Type serviceType)
    {
        throw new NotImplementedException ();
    }
}

我发现使用 Mono 解决此问题的唯一方法是使用自托管 ServiceStack 应用程序,因为它使用System.Net.HttpListener不会出现此问题的应用程序。请参阅我之前关于此问题的答案,其中更详细地描述了这一点。


使固定:

已提交ServiceStack 以解决此问题,并将在版本 4.0.16 中修复

于 2014-03-26T20:42:18.007 回答