通过WCF RIA服务公开OData

时间:2010-06-28 00:17:37

标签: ria wcf-ria-services odata

我创建了一个新的Silverlight应用程序,因此我有一个名为“SilverlightOnLineChess.Web”的Web项目和名为“SilverlightOnlineChess.Client”的Silverlight应用程序。在这个解决方案中,我创建了一个名为“SilverlightOnlineChess.Data”的新WCF RIA Services类库,并在此过程中创建了名为“SilverlightOnlineChess.Data.Web”的关联Web项目。我已经在“SilverlightOnlineChess.Data.Web”项目中创建了必要的实体数据模型和域服务类,并确保我检查了“Expose OData endpoint”。

通过应用程序查看数据,一切正常,花花公子。但是,如果我尝试点击网址,看看OData带回来的内容如下: “ http://localhost:49771/SilverlightOnlineChess-Data-Web-OnlineChessService.svc/OData/ ”它不知道这个网址是什么。它只适用于我在主Web项目“SilverlightOnLineChess.Web”而不是“SilverlightOnLineChess.Data.Web”中创建服务和实体模型。

现在,如果我输入网址:

http://localhost:49771/SilverlightOnlineChess-Web-OnlineChessService.svc/OData/ ”,它会带回元数据。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

服务的URL如下:

域服务的命名空间+ typename,其中的点用短划线替换为.svc / OData /.

在此之后,您需要通过添加

向OData公开查询
[Query(IsDefault = true)]

您要公开的查询上方。

答案 1 :(得分:0)

要公开OData端点,您需要确保在web.Config中包含以下内容:

<system.serviceModel>
    <domainServices>
      <endpoints>
        <add name="OData" type="System.ServiceModel.DomainServices.Hosting.ODataEndpointFactory, System.ServiceModel.DomainServices.Hosting.OData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </endpoints>
    </domainServices>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />    
  </system.serviceModel>

您还需要确保参考以下DLL:

<强> System.ServiceModel.DomainServices.Hosting.OData C:\ Program Files \ Microsoft SDKs \ RIA Services \ v1.0 \ Libraries \ Server \ System.ServiceModel.DomainServices.Hosting.OData.dll

您可以通过查看选择了显示所有文件的客户端项目来确保您正在寻找OData服务的正确URL。转到Generated_Code \ ProjectName.Web.g.cs。找一个Service.svc。这将是您的OData服务的根URI。如果您将域服务放在Service文件夹下,它将是Service / YourServiceName.svc / OData /.