WCF WebApi 的自托管不接受 PUT 动词

2024-01-04

我使用以下方法组合了一个 HTTP 驱动的 APIWCF Web API http://wcf.codeplex.com使用 PUT 动词。当托管在 IIS Express 上托管的 MVC3 项目内部时,一切都会按设计运行。

然而,当我进行单元测试时,我偶尔想要测试传输方面,而不仅仅是针对我自己的资源。我的单元测试因 405 - MethodNotAllowed 失败。同样,在 IIS 中托管的完全相同的服务也可以工作(我在配置文件中启用了 PUT 和 DELETE 动词)。

如何让我的测试中使用的“自托管”服务也接受这些动词?

几乎相同的“获取”测试有效,所以我不认为以下概念有问题......希望......

[Test]
public void PutNewMachine()
{
    // Create new record to add
    var machine = new Machine
                      {
                          ID = 1,
                          Name = "One",
                          Description = "Machine #1",
                          Location = 1
                      };

    using (var client = new HttpClient())
    {
        using (var request = new HttpRequestMessage(
                                         HttpMethod.Put, 
                                         HOST + "/1"))
        {
            request.Content = new ObjectContent<Machine>(machine);

            using (var response = client.Send(request))
            {
                Assert.AreEqual(
                    HttpStatusCode.Created,
                    response.StatusCode,
                    "New record put should have been acknowledged "
                                    + "with a status code of 'Created'");
            }
        }
    }
}

在测试设置中,我使用以下 Autofac 代码准备端点(这同样适用于“获取”):

var builder = new ContainerBuilder();
builder
    .Register(c => new FakeDatabase())
    .As<IDatabase>()
    .SingleInstance();
builder
    .Register(c => new GenericRepository<Machine>(c.Resolve<IDatabase>()))
    .As<IResourceRepository<Machine>>();
builder
    .Register(c => new MachineService(c.Resolve<IResourceRepository<Machine>>()))
    .As<MachineService>();
Container = builder.Build();
Scope = Container.BeginLifetimeScope();

host = new HttpServiceHost(typeof(MachineService), HOST);
host.AddDependencyInjectionBehavior<MachineService>(Container);
host.Open();

我的服务在以下接口中定义:

[ServiceContract]
public interface IResourceService<in TKey, TResource>
{
    [WebGet(UriTemplate = "{key}")]
    TResource Get(TKey key);

    [WebInvoke(Method = "PUT", UriTemplate = "{key}")]
    TResource Put(TKey key, TResource resource);

    [WebInvoke(Method = "POST")]
    TResource Post(TResource resource);

    [WebInvoke(Method = "DELETE", UriTemplate = "{key}")]
    void Delete(TKey key);
}

因此,例如,如果我有一个 MachineService,它会实现该接口(两者class MachineService : IResourceService<string, Machine> and ... : IResourceService<int, Machine>已被试用 - Get = OK,Put = Nothing。

EDIT:我似乎在 InternalServerError 和 MethodNotAllowed 错误之间跳来跳去 - 仅当使用自托管时。我已确保我作为用户有权打开端口(Win7 + 非管理员),但结果加上我选择的端口似乎可以预测 Get 的功能。 “Post”似乎也有类似的问题! :-(

EDIT2: 界面现已更改为可用!

[ServiceContract]
public interface IResourceService<in TKey, TResource>
{
    [WebGet(UriTemplate = "{key}")]
    TResource Get(TKey key);

    [WebInvoke(Method = "PUT", UriTemplate = "{key}")]
    TResource Put(HttpRequestMessage<TResource> resourceRequest, TKey key);

    [WebInvoke(Method = "POST", UriTemplate = "{key}")]
    TResource Post(HttpRequestMessage<TResource> resourceRequest, TKey key);

    [WebInvoke(Method = "DELETE", UriTemplate = "{key}")]
    void Delete(TKey key);
}

当我更改方法签名以接受 HttpRequestMessage 请求而不是 T 本身时,执行 PUT 或 POST 对我有用。

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

WCF WebApi 的自托管不接受 PUT 动词 的相关文章

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

    有没有办法在集线器之外获取当前的 signalR 请求用户 我可以在集线器方法内部使用 Hub Context User 但是如果集线器方法调用任何其他底层 Wcf 服务调用 附加的BehaviorExtensionElement 用于添加
  • jQuery $.ajax 调用 WCF 服务返回 400 错误请求

    更新在最后 我正在使用不熟悉的技术来实现一个想法 我写过一些WCF服务 但从未做过任何高级配置 这是我第一次深入了解 jQuery 前提是我创建一个WCF服务来获取分支信息 由jQuery检索 我的第一次搜索产生了这个页面 http www
  • 强制 WcfSvcHost.exe 使用我的自定义服务主机

    是否可以强制 WcfSvcHost 当我执行 F5 或在解决方案中调试另一个项目时自动执行 使用自定义 ustom 服务 通过使用服务工厂 我的自定义服务主机在我的 asp net 主机容器中运行良好 该服务工厂又调用自定义服务库 但是当
  • WCF:配置已知类型

    我想知道如何在 WCF 中配置已知类型 例如 我有一个Person类和一个Employee班级 这Employee类是 的子类Person班级 两个类都标有 DataContract 属性 我不想对类的已知类型进行硬编码 例如将 Servi
  • 捕获通信异常而不是自定义故障异常 - WCF

    在服务器上我抛出这样的异常 catch SqlException exception if exception Message Contains Custom error from stored proc Exception to be t
  • WCF服务契约上的数据注释

    我有一个 WCF 服务 其中定义了一个 DataContract 类 每个属性都有 DataMember 属性 并且我已向其中几个属性添加了几个数据注释属性 Required 和 StringLength 然后 我在 ASP NET MVC
  • WCF 数据合约中可以包含 WCF 操作合约吗?为什么?

    我有一份数据合同 说是用户 它是可序列化的并且可以通过网络传输 我想要一个操作合约 SaveUser 我可以将 SaveUser User user 作为操作合同保留在我的服务合同中 但我可以将其作为自己的行为保留在我的数据合约本身中吗 理
  • 如何研究.NET 中的非托管内存泄漏?

    我有一个通过 MSMQ 运行的 WCF 服务 内存随着时间的推移逐渐增加 表明存在某种内存泄漏 我在本地运行该服务并使用 PerfMon 监视一些计数器 CLR 内存托管堆字节总数保持相对恒定 而进程的私有字节随着时间的推移而增加 这让我相
  • SOA架构数据访问

    在我的 SOA 架构中 我有几个世界碳基金服务 我的所有服务都需要访问数据库 我应该创建一个专门的 WCF 服务来负责所有数据库访问吗 或者 如果我的每个服务都有自己的数据库访问权限 可以吗 在一个版本中 我在一项服务中只实例化了一个实体层
  • 本地计算机上的服务启动然后停止,某些服务如果没有被其他服务或程序使用则自动停止

    我创建了一个示例 Windows 服务并成功安装了我的服务 但是在要启动服务时 我收到以下错误 本地计算机上的此服务启动然后停止 如果其他服务或程序未使用某些服务 则会自动停止 我的配置文件代码
  • 带有 WCF BadContextToken 的 PHP Soap 客户端

    经过几天的谷歌 in 尝试 脱发 我仍然找不到解决方案 所以请帮助 简短信息 我需要使用 PHP SOAP 客户端 的 WCF 服务 它使用 wsHttpBinding ws security 并且无法设置 basicHttpBinding
  • 手动将 ClientBase 集合类型从 Array[] 更改为 List<>

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

    我有一个 Web API 接口 我正在尝试适应多租户架构 以前 我们采用 WCF 模式 将参数 客户端 ID 传递给服务 然后服务将其存储起来以供稍后在代码中使用 这意味着客户端 ID 不必是传递给每个调用的第一个参数 我想对 Web AP
  • 如何在WCF Rest服务中从流上传图像

    我正在尝试创建 wcf 服务 该服务将上传 pdf doc xls 图像等文件 但 pdf txt 文件正在上传并正确打开 但是当我尝试上传图像文件时 文件正在上传 但是图像不可见 OperationContract WebInvoke M
  • 在 WCF 上重用我的 PagedList 对象

    问题 我有一个自定义集合PagedList
  • 如何防止在 CXF Web 服务客户端中生成 JAXBElement

    我正在尝试使用 CXF 创建一个 Web 服务客户端来使用 WCF Web 服务 当我使用 wsdl2java 时 它生成具有 JAXBElement 类型而不是 String 的对象 我读到有关使用 jaxb bindings xml 文
  • wcf json网络服务

    创建 JSON Web 服务的最佳方法是什么 我们还有另一个使用 Java 的团队 他们坚持使用 JSON 完成所有通信 我更喜欢使用 WCF 而不是任何第三方框架 我找到了这个博客 http www west wind com weblo
  • 无法从 Windows 7 上的 Windows 服务启动桌面应用程序

    HI 我在 Windows 7 上有 C WCF Windows 服务 以具有管理员权限的用户身份登录 我正在尝试在服务启动后启动桌面应用程序 我发现的所有讨论都是关于 Windows 工作站和桌面 我创建了一个单独的线程 设置线程工作站和
  • jquery ajax“发布”调用

    我是 jQuery 和 Ajax 的新手 并且在 发布 方面遇到问题 我正在使用 jQuery Ajax post 调用将数据保存到数据库 当我尝试保存数据时 它将 null 传递给我的 C 方法 jQuery 看起来像这样 functio
  • nHibernate + wcf + Isession

    我有一个包含 3 个项目的 C 解决方案 数据 WCF 和 UI 第一个是与数据库对话的类库 它通过第二个项目公开 该项目的类型为 WCF 服务库 原因是它将在第三个项目 称为 UI 的 Asp net 应用程序 作为指向 dll 的简单

随机推荐

  • 如何更改wordpress中仅一页的css?

    我只需要更改主页的 css 我在 google 上搜索过 很多建议是将页面 id 添加为 css 选择器的一部分 但当我尝试的时候 似乎不起作用 我想更改类 contentclass 页面 ID 为 599 所以这是我尝试过的 post i
  • 在 Visual Studio Code for Go 中自动完成括号

    在使用 Visual Studio Code 时 我注意到当我从自动完成功能编写函数时 它永远不会使用括号自动完成 例如 fmt now select a function Print a interface from autocomple
  • 如何使用 Flask 跟踪匿名用户

    我的应用程序实现了一个购物车 匿名用户可以在其中添加产品 仅在付款前才需要用户登录 如何实施 主要的挑战是 Flask 必须跟踪用户 即使是匿名的 及其订单 我目前的方法是利用AnonymousUserMixin被分配给的对象current
  • 将绘图嵌入到 PyQt5 中的图形视图中

    I use pyqtgraph在 PyQt5 GUI 中绘图 我可以在弹出窗口中绘图 但我正在尝试将图表嵌入到graphicsView area 以下是我在新窗口中绘制简单绘图的方法 self pushButton clicked conn
  • Base64 字符串转 UIImage

    我正在尝试将 base64 字符串解码为 Swift 中的 UIImage 我的示例图像的编码字符串开头为 数据 图像 jpeg base64 9j 2wBDAAYEBQYFBAYGBQYHBwYIChAKC 完整的编码字符串可以在以下位置
  • 我可以使用传递到组件的变量来设置 svelte 样式 css 属性值吗

    我想创建一个接收图像名称和路径的简洁组件 我想让组件使用 CSS 将图像设置为 背景图像 我已经尝试过以下似乎不起作用 调用的组件应用程序 svelte
  • 为什么故事板没有反映我使用属性检查器面板设置到 UILabel 的文本属性?

    我在故事板上有一个 UILabel 默认文本为 标签 然后 我转到属性检查器并选择属性文本样式 当我单击 文本 字段时 我会在新窗口中看到多种字体可供选择 我看到本例中的默认文本已设置为 Helvetica 大小 17 0 在浏览所提供的字
  • 字符串未更新

    我正在使用 MVC 和 PDO 我试图根据会话是否为空来更新字符串 因此在我的 index phtml 中我有 p Welcome back a href logout php a p p Hello would you like to a
  • Matlab:更改图例中条目的顺序

    我有一个图形文件 我想在其中更改条目的顺序 例如 将第一个条目作为第三个条目 我很久以前就保存了这个Figure fig 所以我不确定是否可以恢复原始代码 这里我向你展示我的情节 我希望图例元素按降序排列 如图所示 但由于错误 我的第二个条
  • Linux:proc/net/sockstat tcp mem越来越大

    现在 我们的系统发现hang和tcp mem越来越大 proc net sockstat 当出现hang时 将打印 tcp 孤立套接字太多 From sockstat 我们知道socket很少 但是消耗了1500 page mem 为什么呢
  • BASH shell 脚本 echo 在同一行输出

    我有一个简单的 BASH shell 脚本 用于检查 curl 命令的 HTTP 响应代码 逻辑很好 但我坚持 简单地 打印出 输出 我使用的是 GNU bash 版本 3 2 25 1 release x86 64 redhat linu
  • 修剪章鱼 - 删除不属于 O(N) 循环的有向图的所有分支

    Preliminaries safe to skip This question is in relation with Longest Path for Directed Cyclic Graph https stackoverflow
  • 修复了开发办公套件时 Visual Basic 中 FontSize 函数的错误

    在花了几个小时研究 FontSize 函数后 我被一段代码困住了 字体列表 每当我想定义每个字体具有相同的大小时 它会自动将其缩放到72 我浏览了互联网以了解如何获取字体列表 这很有效 但是当我将 fontSize 添加到 sizecomb
  • SunPkcs11 实现的 64 位替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们使用中间件来构建通过 JDK 1 6 30 64 位安装程序安装的软件应用程序 我们最近收到使用 U
  • 使用 Matplotlib 以非阻塞方式绘图

    我在尝试使 matplotlib 绘制函数而不阻止执行时遇到问题 我尝试过使用show block False 正如有些人建议的那样 但我得到的只是一个冻结的窗口 如果我只是打电话show 结果被正确绘制 但执行被阻止 直到窗口关闭 从我读
  • 并非 CSS 样式类的所有属性都适用

    我将以下内容写在 CSS 文件中 span hoverhelp border double border width 3 border color 000000 background color eeffcc padding 5 font
  • 从 Servlet 到 JSP

    当尝试在我的 servlet 中传递用 HTML 构建的表时 如下所示 response setContentType text html PrintWriter out response getWriter out println out
  • 将 Write-Host 语句重定向到文件

    我有一个正在调试的 PowerShell 脚本 并且想要重定向所有脚本写主机 https learn microsoft com en gb powershell module Microsoft PowerShell Utility Wr
  • PSCmdlet 动态自动完成参数(如 Get-Process)

    在 powershell 中 某些参数具有动态自动完成行为 例如 获取 处理参数名称 我可以使用 TAB 遍历所有流程 我想在我的 PSCmdlet 中使用此行为 但问题是 我只知道如何使用静态自动完成值来做到这一点 参见示例 public
  • WCF WebApi 的自托管不接受 PUT 动词

    我使用以下方法组合了一个 HTTP 驱动的 APIWCF Web API http wcf codeplex com使用 PUT 动词 当托管在 IIS Express 上托管的 MVC3 项目内部时 一切都会按设计运行 然而 当我进行单元