OData / WCF 数据服务不适用于复杂类型

2024-04-15

我对 OData 和 WCF 数据服务是全新的,所以这可能是一个简单的问题。我正在使用 VS Web Developer Express 2010,其中我在控制台应用程序中托管了一个非常简单的 WCF 数据服务。它从存储库(位于单独的 dll 项目中)返回一个简单“Study”类的 IQuerable 集合,该集合又从另一个 dll 中的数据库项目中检索“Study”类(因此解决方案中有 3 个项目)。

我在数据库项目中还有一个“实验”类,并且一项研究中可以有多个实验。当我从研究中排除实验类时,一切正常,并且我得到了返回的数据。当我将 List 集合添加到 Study 类时,就会出现问题,然后当我尝试运行该服务时,会出现运行时错误。在 Firebug 中,错误是“500 内部服务器错误”,浏览器中的消息是“请求错误”。服务器在处理请求时遇到错误。有关更多详细信息,请参阅服务器日志。

我有 IIS 7,而且刚刚安装了 IIS 7.5,但它对我来说还是全新的,因此我无法弄清楚该服务托管在哪里或在哪里查看服务器/Web 日志。 “C:\inetpub\logs\LogFiles\W3SVC1”中仅可见 IIS 7 日志。当我运行应用程序时,VS Web 服务器 (Cassini) 不会启动,因此这表明它托管在 IIS 7.5 中(?)。

So
- 如何返回子类/复杂对象?
- 我如何知道我的服务托管在哪里以及在哪里可以找到服务器日志?

这是主机应用程序:

using MyStudyRepository;
using MyStudyDB;

namespace MyStudyService
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string serviceAddress = "http://localhost:998";
            Uri[] uriArray = { new Uri(serviceAddress) };
            Type serviceType = typeof(StudyDataService);

            using (var host = new DataServiceHost(serviceType,uriArray))
            {
                host.Open();
                Console.WriteLine("Press any key to stop service");
                Console.ReadKey();
            }
        }
    }

    public class StudyDataService : DataService<StudyRepository>
    {
        public static void InitializeService(IDataServiceConfiguration config)
        {
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
        }
    }
}

这是存储库:

using MyStudyDB;

namespace MyStudyRepository
{
    public class StudyRepository
    {
        List<Study> _List = new List<Study>();

        //Add constructor to populate myStudies list on creation of class
        public StudyRepository()
        {
            for (int i = 1; i < 5; i++)
            {
                Study myStudy = new Study() { ID = i, StudyOwnerId = i, StudyName = "Study" + i.ToString() /*, Experiments = null */ };
                _List.Add(myStudy);
            }
        }

        public IQueryable<Study> Studies
        {
            get
            {
                return _List.AsQueryable<Study>();
            }
        }
    }
}

这是数据库:

namespace MyStudyDB
{
    public class Study
    {
        public int ID { get; set;}
        public int StudyOwnerId { get; set; }
        public string StudyName { get; set; }
        //public List<Experiment> Experiments { get; set; }
    }

    public class Experiment
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int StudyId { get; set; }
    }
}

要调试 WCF 数据服务,请参阅此博文:http://blogs.msdn.com/b/phaniraj/archive/2008/06/18/debugging-ado-net-data-services.aspx http://blogs.msdn.com/b/phaniraj/archive/2008/06/18/debugging-ado-net-data-services.aspx至于为什么Experiment的集合不起作用,有两个原因:

  • Experiment 类未被识别为实体类型,因为没有为其设置实体。 (实体集是存储库类上的 IQueryable 属性,但您没有)。因此,Experiment 类仅被识别为复杂类型。
  • 当前发布的 WCF 数据服务版本不支持 MultiValue,MultiValue 实际上是原始或复杂类型的集合。

所以你有两种方法来“解决”这个问题。通过在存储库类上添加 IQueryable 属性,确保 Experiment 实际上是一个实体。 或者使用最新的 CTP (http://blogs.msdn.com/b/astoriateam/archive/2011/06/30/announcing-wcf-data-services-june-2011-ctp-for-net4-amp-sl4)。 aspx) 确实支持多值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OData / WCF 数据服务不适用于复杂类型 的相关文章

  • 在集线器外部获取 SignalR 用户 (Hub.Context)

    有没有办法在集线器之外获取当前的 signalR 请求用户 我可以在集线器方法内部使用 Hub Context User 但是如果集线器方法调用任何其他底层 Wcf 服务调用 附加的BehaviorExtensionElement 用于添加
  • 无法引用 AppFabric 上托管的 WCF Web 服务的 WSDL

    我开发了一个 WCF 服务 并且在 Visual Studio 2010 中 我可以毫无问题地导入 WSDL 将其部署到 AppFabric 后 我获得了 WSDL 但由于某种原因无法找到 WSDL 内部引用的几个架构文件 不知道是配置问题
  • 是否可以通过服务类型的实例实例化 WebServiceHost,而无需无参数构造函数?

    我正在尝试创建自托管System ServiceModel Web WebServiceHost NET 4 但是我遇到了构造函数的问题 有以下三种选择 WebServiceHost 一个无参数的构造函数似乎毫无意义 因为无法指定服务的类型
  • 在.Net中使用ObjectCache缓存对象并设置过期时间

    我陷入了一个场景 我的代码如下 更新 它不是关于如何使用数据缓存 我已经在使用它及其工作 它是关于扩展它 以便该方法在到期时间和从外部源获取新数据之间不会进行调用 object string this GetDataFromCache ca
  • 数据库连接模拟失败

    我有一个 SL4 应用程序 它使用 WCF 与后端 SQL Server 2008 数据库进行通信 由于调用的存储过程需要数据库权限 其中一项 WCF 服务需要使用专用系统帐户连接到数据库 我尝试在服务代码中使用模拟来实现解决方案 例如 i
  • .NET Web 服务 (asmx) 超时问题

    我正在连接到供应商提供的 Web ASMX 服务并通过线路发送一组数据 当您向项目添加服务引用时 我的第一次尝试遇到了 Visual Studio 默认在 app config 文件中引发的 1 分钟超时 我把它增加到 10 分钟 又是一次
  • autofac wcf注册错误

    我正在尝试在 Wcf 上尝试使用 Autofac 进行结构 namespace WcfService1 Model DataContract IsReference true public partial class Account Dat
  • 通过 IoC 容器实例化 WCF 服务

    是否可以使 WCF 运行时通过 IoC 容器而不是通过其通常的进程来实例化服务 此外 考虑到容器的类型生活方式配置与服务的 InstanceContextBehavior 之间存在潜在冲突 这种方法会是一个糟糕的主意吗 我知道我可能完全问错
  • 优雅地终止 WCF 服务 - 完成所有打开的会话并限制新会话

    我有一个我编写的 WCF 服务 它托管在 Windows 服务中 它以 PerSession 模式运行 该服务允许客户端通过该服务远程打开文件 更改文件以及关闭文件 到目前为止一切工作都非常顺利 当 Windows 服务停止时 我希望能够让
  • WCF 每个端点有不同的身份验证方法

    我有 WCF 服务 我的服务有 2 个端点 每个端点都有不同的联系人 该服务使用自定义用户名身份验证 在 的 customUserNamePasswordValidatorType 属性中定义 问题是两个端点将使用相同的身份验证方法 无论如
  • 序列化 .NET WCF 服务的类型时出现问题:服务 WSDL 在 XSD 中定义空类型

    我正在使用 WCF 编写一个 Web 服务 我创建了数据合约 我创建了我的服务合同 界面 我定义了方法 其参数的类型与数据契约相同 我实现了创建服务类的服务合同 我使用 svc 文件和 IIS 托管我的服务 我尝试了我的服务 寻找http
  • 手动将 ClientBase 集合类型从 Array[] 更改为 List<>

    我将自己的 WCF 代理与 Client Base 一起使用 我想做一些类似于 svc util 中的 ct 属性的操作 并告诉代理返回 List 集合类型 我不能使用 List 因为实体由 nhibernate 管理 所以我必须使用 IL
  • 在(每个)Web API 操作之前执行代码

    我有一个 Web API 接口 我正在尝试适应多租户架构 以前 我们采用 WCF 模式 将参数 客户端 ID 传递给服务 然后服务将其存储起来以供稍后在代码中使用 这意味着客户端 ID 不必是传递给每个调用的第一个参数 我想对 Web AP
  • 我希望能够使用 lambda 表达式来指定要通过 wcf 服务返回的值范围

    我不知道这是否可能 但这会很酷 问题是这是否可能 但如果可能的话 举一个例子 我不确定您将使用什么方法签名来将 lambda 表达式传递到其中 例如方法IList
  • WCF 服务 - 自定义主体

    在 WCF 服务类的构造函数中 我将当前主体设置为消息头中传递的主体的主体 Thread CurrentPrincipal OperationContext Current IncomingMessageHeaders GetHeader
  • 如何使用 WSDL 和 XSD 的注释生成 .NET 类

    有一些 XSD 和 WSDL 我想从它们生成 C 代码 我使用了 svcutil exe 但它不会从 XSD 注释生成 XML 注释
  • wcf json网络服务

    创建 JSON Web 服务的最佳方法是什么 我们还有另一个使用 Java 的团队 他们坚持使用 JSON 完成所有通信 我更喜欢使用 WCF 而不是任何第三方框架 我找到了这个博客 http www west wind com weblo
  • WPF 和 WCF 应用程序的用户身份验证/授权的“最佳实践”是什么?

    假设我有一个 NET 富客户端 WPF 应用程序 它将同时部署在 3 个不同的场景中 客户端和服务器代码在单个进程中运行 客户端代码在 Intranet 计算机上运行 并通过 WCF 与运行应用程序 域 基础设施代码的服务器计算机进行通信
  • jquery ajax“发布”调用

    我是 jQuery 和 Ajax 的新手 并且在 发布 方面遇到问题 我正在使用 jQuery Ajax post 调用将数据保存到数据库 当我尝试保存数据时 它将 null 传递给我的 C 方法 jQuery 看起来像这样 functio
  • 从一个客户端使用多个 WCF 服务

    我的网络场有 10 台运行 IIS 的服务器 在每台服务器上我都有相同的网站和相同的 WCF 服务 它公开了一些用于读取 删除缓存 会话 应用程序变量和其他内部数据的功能 在其他一些 Web 服务器上 我有一个 管理 Web 应用程序 它是

随机推荐

  • 查询与空字段的比较

    我的 Firestore 集合包含带有字符串字段的文档 该字段可以是null 我期望如果我查询 Collection products Where producedDate lt 2018 01 15 我将获取 生产日期 早于 2018 1
  • UITableView 滚动时重复单元格

    当我向下滚动 UITableView 时 它开始向我显示我已经看到的相同单元格 并且稍微滚动一下继续将单元格放在错误的位置 这是我正在使用的代码 如果需要任何其他信息 请告诉我 h interface HomeViewController
  • MediaStore.Playlists.Members.moveItem 的替代方案

    我一直在使用以下代码从 Android 应用程序的播放列表中删除项目 private void removeFromPlaylist long playlistId int loc ContentResolver resolver getA
  • 为什么在基于 Lisp 的语言中习惯上将许多右括号放在一行上?

    通常代码如下所示 one thing another thing arg1 f arg5 r another thing arg1 f arg5 r 为什么不喜欢这样 one thing another thing arg1 f arg5
  • 在 JQuery 中通过 AJAX 上传文件

    我是 JQuery AJAX 的新手 我想用jquery实现文件上传 是否可以使用 JQuery AJAX 进行文件上传并将其发送到 Servlet Servlet 可以使用 apache file commons 来上传文件 有人可以建议
  • Android 通知 LED 不使用我的颜色

    我正在尝试使用一个通知 该通知也使用我的 S3 上的通知 LED 但由于某种原因 颜色将始终为蓝色 我猜这是默认值 我尝试使用不同的颜色但没有任何变化 其他应用程序 例如 Whatsapp Gmail 和 Facebook 在显示不同颜色的
  • Mule 中使用日期的 JMS 消息选择器

    在 Mule 3 3 1 中 在异步处理期间 当我的任何外部服务关闭时 我想将消息放在队列中 retryQueue 具有特定的 下次重试 时间戳 处理来自此的消息的流程retryQueue根据 下次重试 时间选择消息 如果 下次重试 时间超
  • 为什么我不能将会话 bean 作为 Java EE 5 中的 JSF 支持 bean

    AFAIK JBoss Seam 的全部目的是集成 EJB 和 JSF Seam in Action 一书说道 根据设计 EJB 组件不能直接绑定到 JSF 视图 EJB 真是太棒了 组件具有可扩展性 事务性 线程安全性和安全性 但作用不大
  • 有没有办法在 venv/web 服务器中安装 Tesseract OCR?

    我制作了一个执行 OCR 功能的 Python 脚本 然后回收了该脚本并使用 Flask 制作了一个 Web 应用程序 Web 应用程序及其库位于 virtualenv 中 但该应用程序使用操作系统 Windows 中安装的 Tessera
  • load_plugin_textdomain 不起作用

    嘿 我正在尝试本地化一个名为 Donate Plus 的插件 技术上本地化 该插件附带 en CA 和 de DE 文件 我尝试创建 he IL 文件但没有成功 所以我尝试使用插件附带的 de 文件 但没有成功 我已将 wp config
  • SwiftUI:不同层次结构中的弹出框+工作表问题

    我遇到了呈现弹出框然后尝试呈现表格的问题 该表无法呈现 我准备了一个显示两个按钮的简短代码 第一个在其自身上呈现一个弹出窗口 单击此按钮 第二个呈现一张纸 然后这个按钮 重现步骤 可在 iPad 上重现 单击第一个按钮 会出现一个弹出窗口
  • 使用 jdk 8 时 Java 模态对话框冻结整个应用程序

    很少 当使用 Java Swing 应用程序显示模式对话框时JDK1 8 0 144 整个应用程序被冻结 我在 JDK bug 数据库中找不到相关的 bug 唯一看起来远程相关的是this one https bugs openjdk ja
  • 如何在 TypeScript 中定义通用对象数组,每个项目都有不同的模板参数[重复]

    这个问题在这里已经有答案了 我试图为表单定义一个字段数组 其中每个项目可能有不同的类型 我定义了这些类型 interface FormData value1 number value2 number null value3 string v
  • 如何将 `std::chrono::milliseconds` 转换为 `boost::posix_time::milliseconds`

    我正在使用 boost asio deadline timer 像这样在async read操作在一个TCP套接字 我在用提升1 61 long time out millis 2000 boost asio deadline timer
  • C# 使用子类参数重写方法

    我正在努力实现这样的目标 public abstract class BaseEvent public abstract void Dispatch IEventHandler handler public class MyEvent Ba
  • Android 上检测触摸区域

    是否有可能检测到每个被触摸的像素 更具体地说 当用户触摸屏幕时 是否可以跟踪用户触摸的点簇的所有 x y 坐标 如何区分用户用拇指绘图和用指尖绘图的区别 我想根据用户触摸屏幕的方式反映画笔的差异 并且还想跟踪随着时间的推移触摸的所有像素的
  • rake 资产预编译失败

    当我跑步时bundle exec rake assets precompile trace 我的预编译失败 但我看不出任何具体原因 请参阅此粘贴箱以获取我的输出 http pastebin com zggZyPyM http pastebi
  • Android - 拦截并传递所有触摸事件

    我有一个覆盖 ViewGroup 它是屏幕的大小 我想用它来在用户与应用程序交互时显示效果 但仍然将 onTouch 事件传递给任何底层视图 我对所有 MotionEvents 不仅仅是 DOWN 感兴趣 所以 onInterceptTou
  • 找不到模块:错误:无法解析模块“semantic-ui-css”

    我正在尝试使用Webpack https webpack github io 语义用户界面 http semantic ui com 但没有成功 我试过 npm i semantic ui css In my index js import
  • OData / WCF 数据服务不适用于复杂类型

    我对 OData 和 WCF 数据服务是全新的 所以这可能是一个简单的问题 我正在使用 VS Web Developer Express 2010 其中我在控制台应用程序中托管了一个非常简单的 WCF 数据服务 它从存储库 位于单独的 dl