首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当WCF方法的HTTP谓词为PUT或DELETE时,WCF方法将被调用两次

的原因是由于HTTP协议的限制。PUT和DELETE方法在HTTP协议中被定义为非幂等方法,即多次调用同一个PUT或DELETE请求可能会产生不同的结果。

在WCF中,当使用PUT或DELETE方法调用服务端的方法时,WCF框架会首先发送一个HTTP请求来获取服务端方法的元数据信息,然后再发送第二个HTTP请求来执行实际的方法调用。这样设计的目的是为了确保在执行实际方法调用之前,客户端和服务端都能够对方法进行适当的验证和准备。

对于这种情况,可以通过在服务端的方法中进行判断来处理。可以在方法中添加一个参数来标识当前是否为第一次调用,如果是第一次调用,则只返回元数据信息,不执行实际的业务逻辑;如果是第二次调用,则执行实际的业务逻辑。

以下是一个示例代码:

代码语言:txt
复制
[ServiceContract]
public interface IMyService
{
    [OperationContract]
    [WebInvoke(Method = "PUT", UriTemplate = "/data/{id}")]
    void UpdateData(string id, bool isFirstCall);
}

public class MyService : IMyService
{
    public void UpdateData(string id, bool isFirstCall)
    {
        if (isFirstCall)
        {
            // 只返回元数据信息,不执行实际的业务逻辑
            return;
        }

        // 执行实际的业务逻辑
        // ...
    }
}

在上述示例中,通过在UpdateData方法中添加一个bool类型的参数isFirstCall来标识当前是否为第一次调用。在第一次调用时,只返回元数据信息,不执行实际的业务逻辑;在第二次调用时,执行实际的业务逻辑。

对于WCF方法的HTTP谓词为PUT或DELETE时被调用两次的情况,可以使用上述方法来处理。这样可以确保在实际的业务逻辑中不会重复执行导致数据不一致或其他问题的发生。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(移动推送、移动分析、移动测试等):https://cloud.tencent.com/product/mobile
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙(Tencent XR):https://cloud.tencent.com/product/xr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Asp.net web api 知多少

REST是一种架构风格,它将每个服务对待资源并通过Http协议方法(GET、POST、PUTDELETE)获取数据。 REST风格架构包含客户端和服务端。...REST 使用 URI 以及(GET, PUT, POST, DELETE)方法调用Service。 比REST慢 比SOAP快 Q4. 什么是ASP.NET WEB API? Ans....您想创建一个可以使用快速传输通道服务,请选择WCF,如TCP,命名管道,或者甚至UDP(在WCF 4.5),并且所有其他通道不可用时能够支持HTTP传输信道。...您要通过HTTP创建面向资源服务选择WEB API,因为其可以使用完整 HTTP特性(如URI,请求/响应头,缓存,版本控制,各种内容格式)。...Web Api 控制器中action 要么使用HTTP action 动词 (GET, POST, PUT, DELETE) 特性标记或者以HTTP动词作为action方法名命名前缀。

4.8K50

原 REST - Representati

分层系统 代理服务器缓存服务器等中间服务器可用于提高性能引入安全性。 统一接口 统一接口 (如 HTTP HTTP GET, POST, DELETE, PUT) 用于访问资源。...HTTP Methods HTTP创造了一种与web上资源进行通信标准方式。获取、放置、删除、张贴是访问资源一些常用方法。 GET 用特定表示方式请求资源....(并非局限于httpget/set等等) PUT 用特定表示方式更新资源. PUT 删除指定资源. PUT 创建一个新资源....但是, 当我们构建服务公开端点, 应该注意安全问题。rest风格服务只http端点, 因此使用 http (如 HTTPS、证书) 实现所有安全方面也可以用 rest 实现。...例如, 客户端试图将数据插入更新到 sql server 数据库中, 如果客户端没有权限, sql server 将引发异常, 这可能会冒泡回客户端。

1.2K70
  • 使用 ServiceStack 构建跨平台 Web 服务

    Web服务通常有远程过程调用(RPC)和RESTful (HTTP)两类,现在占据主导地位Web服务是RESTful (HTTP),具体内容可以参看文章《REST在企业中获得成功了么?》...远程过程调用 (RPC) ,每个请求旨在类似于函数调用: public interface IService {       string DoSomething(int input); } RPC 方法对服务修改非常不友好...例如前面的代码段,如果要求从客户端来执行更高版本 Web 服务 DoSomething 方法两个输入参数 — 需要返回字符串值之外另一个字段 —— 给老客户重大更改是不可避免。...当然,您始终可以创建平行 DoSomething_v2 方法,要带两个输入参数,但久而久之会搞乱您 Web 服务接口和消费者,服务变得越来越丑,用WCF实现Web服务就是属于这种情况,下面我们介绍...指定任何 Web 服务请求是指可以通过 HTTP GET 和 HTTP POST 调用操作。 这种强制措施,简化了 rest 风格 Web 服务实现。

    1.7K50

    WCF Web Api

    WCFWeb API也包含了简化HTTP Body到.NET类转换扩展方法。客户端还包括HttpRequestMessage和HttpResponseMessage是强类型HTTP消息交涉。...HTTP 通道堆栈 - WCF HTTP是不可知托管环境,因为它可以在ASP.NET托管,直接在IIS或在桌面前端自托管,像一个窗口服务后端进程。...如堵在OAuth渠道处理安全性,所有消息日志记录在通道层水平低问题可以得到解决。新HttpChannel API允许是一个简单易用扩展点,允许开发人员轻松地插入这样顾虑。...调度 - 调度程序是当前HTTP请求路由到HTTP服务实例和服务方法责任。服务和方法基础上匹配URI和HTTP方法(GET,POST,PUTDELETE等)。...在这层序列化也是处理,允许HTTP消息进行改造和其他组件Body和.NET类型互相转换。

    80370

    REST 入门介绍

    或许大家手边.NET系统整合都还是使用WCF(甚至Web Service)进行跨主机沟通,但是微软在ASP.NET MVC 4 Beta里也开始推广REST架构ASP.NET Web API。...在 HTTP/1.1 RFC 2616第 5.1.1 Method 一节定义了八大类 HTTP 方法,除了我们常用 GET 与 POST 之外,在 REST 中常用还有 PUTDELETE。...但我们要处理 PUT DELETE 请求呢?通过 RESTful 我们可以简单 URI 来定义资源并和 HTTP 方法配合使用。...Resource 与 HTTP 方法对应 资源 资源说明 GET PUT POST DELETE http://www.cnblogs.com/Products/ Products是一组资源集合 列出...在 RESTful 每个资源有自己独立 URI, Client 从资源集合单个资源开始进入,不管是资源集合单个资源,我们都能与 HTTP 方法配合使用,例如,GET 下载,PUT 更新,POST

    1.2K80

    一个简单REST服务实例

    微软在WCF 3.5中就通过提供基于Web HTTP编程模式使我们很容易地创建基于REST服务,WCF 4.0中对此进行了较大改进。...按照REST设计原则,我们将被操作员工信息体现为某种网络资源,而操作类型最好与相应HTTP方法相匹配。...特性,并且其Method属性被分别设置PUT、POST和DELETE。...,不论是用于获取某个指定ID员工信息Get方法,还是用于修改和删除员工记录Update和Delete方法指定ID员工不存在都通过WebOperationContext表示当前Web操作上下文对象将回复状态设置...如下所示三段XML片断分别对应着针对上述三个服务操作调用HTTP请求消息,从这我们可以看出它们就是单纯针对PUT、POST和DELETE方法HTTP请求,而传输给服务端数据直接作为消息主体,

    70870

    MVC项目开发中那些用到知识点(WCF Rest在MVC项目中两种调用方式)

    前言   首先我们来了解一下WCF  Rest吧。 Rest是一种设计风格,不是一个标准。 Rest通常使用HTTP,URI,XML,HTML等流行协议和标准。...Rest对资源操作类型通常包括:获取,创建,删除和修改,这四种操作分别对应着HTTP协议请求GET,POST,DELETEPUT方法。 资源表现形式可以为:XML,HTML,JSON文本。...Rest是服务端-客户端结构中一种应用方法。 Rest使用HTTP协议,因此是无状态。...我将Js函数放在Index视图Window.onload事件中,就是在主页面加载完毕后执行。 效果如下。 ? 总结   以上就是asp.net mvc 中如何调用Rest服务两种方式。...看起来很是很简单, 我也只是很简单实现了调用,当然需要优化地方还是很多。      示例代码下载地址 http://files.cnblogs.com/aehyok/WCFREST.rar

    62720

    WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制

    在[第1篇]中,对WCF采用三种不同实例上下文模式进行了简单比较,本篇重点方法对单调(PerCall)模式进行详细介绍。...,对于两次服务调用请求,服务端先后创建了两个服务实例,在操作方法成功执行后,Dispose方法得以执行。...,我们可以清晰地看出基于相同服务代理操作方法和Dispose方法都执行在相同线程下(线程ID12),并且两次服务操作间隔服务实例释放时间:5秒。...也就是说,在不考虑WCF闲置请求策略(服务实例在超出某个时间段没有被使用情况下,WCF将其清理)情况下,服务实例生命始于通过服务实例进行第一次服务调用,或者调用Open方法开启服务代理之时,服务代理关闭会通知...现在,先后100个客户端(或者服务代理)进行服务调用请求,毫无疑问,100个服务实例会被创建并同时存在于服务端内存之中,并且每一个服务实例引用一个开启状态数据库连接,那么来自第101个客户端服务调用请求抵达

    77670

    帮助页面与自动消息格式(JSONXML)选择

    如上图所示,帮助页面列出了包括相对地址、HTTP方法和基本描述在内所有操作基本信息。我们通过点击HTTP方法对应链接可以获得包括基于相应格式(Xml和Json)消息结构(Schema)和实例。...如果没有通过这种方式对消息格式进行显式设置,我们还可以通过终结点行为WebHttpBehavior回复消息设置一个默认消息格式。除了这种显示设置方式之外,WCF还提供一种自动消息格式选择机制。...为此我们创建了如下一个静态方法GetAllEmployees方法通过WebClient对服务GetAll操作进行调用,并将整个回复消息打印出来,该方法两个参数分别是作为请求HTTP消息Content-Type...GetAllEmployees方法进行三次服务调用。...对于后两次服务调用中,由于请求消息中分别通过Content-Type和Accept报头将“期望”媒体类型设置application/json,所以Json最终作为回复消息格式。

    70970

    WCF之旅(8):WCFSession和Instancing Management

    Session周期绑定到开始和终止Session方法调用之间时间内,这种方式体现在我们在定义Operation Contract通过IsInitiating和IsTerminating显式指定开始和终止...对应Service type进行Host时候,与之对应Service Instance就被创建出来,此后所有的Service调用都被forward到该Instance。...: Client端: 虽然我们我们两次调用Add方法进行累加,但是最终结果 依然是0。...这好像和我们开始所说WCF默认Session支持不相符,默认Session支持是这样:Service Instance和Proxy绑定在一起,调用Proxy任何一个方法时候Session开始...所以方法调用之后,Session被终止,对应Service Instance也标识可回收对象,此时再次调用,显然不能保证有一个对应Service Instance来Handle这个调用,显然这是不允许

    25020

    菜菜从零学习WCF五(生成客户端)

    创建一个可用于配置WCF客户端对象客户端应用程序配置文件   此协定代码编译为客户端应用程序另一个程序集,然后,客户端应用程序可以使用该程序集创建一个WCF客户端对象。   ...--WCF运行时将方法调用转换为消息,然后将这些消息发送到服务,侦听回复,并将这些值作为返回值out参数(ref参数)返回到WCF客户端对象中 3.调用操作   --创建并配置了客户端对象后,请创建一个...--客户端应用程序调用第一个操作WCF将自动打开基础通道,并在回收对象关闭基础通道。   ...这里只讲了一种方法进行客户端调用WCF。其实还有其他方法调用。...我暂时知道还有一种方法就是:在WCF客户端直接右键选中查找到调用服务并点击,然后输入服务地址即可引用成功,并在客户端程序中进行调用。。 本节示例代码下载连接点击下载

    1.1K20

    WCF系列教程之WCF客户端调用服务

    ,,设置服务命名空间UserInfoClientNS 点击确定完成添加,生成客户端代理类和配置文件代码后, 开始Client客户端控制台程序对WCF服务调用,Program.cs代码如下: using...三、归纳总结 通过上面的代码判断WCF客户端调用服务存在以下特点: 1、WCF服务端可客户端通过使用托管属性、接口、方法对协定进行建模。...因此当你在服务端创建了一个服务端协定,并对其进行配置后,客户端就可以通过生成代理类方式(具体生成代理类方式,上面已经提了)和服务端服务进行通信,WCF 运行时将方法调用转换为消息,然后将这些消息发送到服务...客户端应用程序调用第一个操作WCF 将自动打开基础通道,并在回收对象关闭基础通道。 (或者,还可以在调用其他操作之前之后显式打开和关闭该通道。)。...不应该使用 using 块来调用WCF服务方法。因为C# “using”语句会导致调用 Dispose()。 它等效于 Close(),发生网络错误时可能会引发异常。

    2.1K90
    领券