0

我们正在设想一种产品,它将在多个平台 (Xamarin) 上具有 Web 前端和移动应用程序。我已经将一个微风有角的热毛巾示例变成了一个 Web 前端。我的任务是研究拆分微风网络客户端和微风服务器后端。造成这种情况的主要原因是移动开发人员可能会使用微风锐化将他们的对象保存到相同的微风后端。让微风网络客户端和服务器如此紧密地耦合似乎是个坏主意。我复制了这个项目,并在每一端剥离了必要的部分以将它们解耦。

我无法弄清楚的部分是如何让他们再次互相交谈。我简要研究了connectionString,但这似乎不是正确的答案。任何关于如何让他们再次交谈的想法将不胜感激。


编辑:20140725 14:23

从昨天开始,我一直在尝试解决这个问题。我查看了 Web.config 中的 connectionStrings,发现那是死胡同。另一篇文章让我想到了 Web.config 中的 appSettings。

我在 config.js 中找到了一个名为 remoteServiceName 的参数。以前的值是“微风/微风”我把它改成

'http://localhost:4545/breeze/Breeze' 

Web 客户端仍然失败:

Error retrieving data.Metadata query failed for: http://localhost:4545/breeze/Breeze/Metadata; HTTP response status 0 and no message. Likely did not or could not reach server. Is the server running? Error: Metadata query failed for: 'http://localhost:4545/breeze/Breeze/Metadata'; HTTP response status 0 and no message. Likely did not or could not reach server. Is the server running?'

当我在其自己的选项卡中运行该链接时,我会获得元数据。


我去掉了什么?:微风控制器、模型、存储库(仅限 c#)、dbcontext 和 BreezeWebApiConfig


编辑 20140725 14:52

抱歉,我错过了上述例外之前的例外:

XMLHttpRequest cannot load http://localhost:4545/breeze/Breeze/Metadata. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:53555' is therefore not allowed access. 
4

1 回答 1

1

感谢大家在评论中提供的线索!

我已经在上面的编辑中包含了答案的第一部分:

我在 config.js 中找到了一个名为 remoteServiceName 的参数。以前的值是“微风/微风”我把它改成

'http://localhost:4545/breeze/Breeze' 

这让客户端试图与远程服务器交谈。

在那之后,CORS 问题难倒了我。以下三个链接帮助我解决了这个问题:

将 Breeze 与来自另一个域 WebAPI CORS 和 Ninject的 WebApi 服务一起使用 http://msdn.microsoft.com/en-us/magazine/dn532203.aspx

您必须安装 CORS 软件包。来自微软的文章:

首先,为了获得 CORS 框架,您必须从 Web API 应用程序中引用 CORS 库(默认情况下,它们不会从 Visual Studio 2013 中的任何 Web API 模板中引用)。Web API CORS 框架可通过 NuGet 作为 Microsoft.AspNet.WebApi.Cors 包获得。如果您不使用 NuGet,它也可以作为 Visual Studio 2013 的一部分使用,您需要引用两个程序集:System.Web.Http.Cors.dll 和 System.Web.Cors.dll(在我的机器上这些位于 C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Stack 5\Packages)。

下一步是从 webapi-cors-and-ninject stackoverflow 帖子向配置文件添加几行:

 <system.webServer>
<handlers>
</handlers>
<httpProtocol>
  <customHeaders>
    <!-- Adding the following custom HttpHeader will help prevent CORS from stopping the Request-->
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>

显然这是一个非常不安全的解决方案,不应该用于开发环境以外的任何东西。

于 2014-07-31T19:06:58.273 回答