You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含WebInvoke的WCF Rest Service代码转换为CoreWCF Rest Service

CoreWCF 兼容的代码转换方案

转换后的接口代码

原WCF的WebInvoke特性在CoreWCF中已被弃用,需改用AspNetCore MVC的HTTP特性结合CoreWCF契约特性实现REST服务:

using CoreWCF;
using Microsoft.AspNetCore.Mvc;

[ServiceContract]
public interface IUserService
{
    [OperationContract]
    [HttpPost("GetUserData")] // 对应原UriTemplate路径与POST请求方法
    [Consumes("application/json")] // 对应原RequestFormat = Json的配置
    [Produces("application/json")] // 对应原ResponseFormat = Json的配置
    string GetUserDetails([FromBody] GetUserDetailsRequest request);
}

// 适配原WrappedRequest的请求包裹类(若原服务期望请求体为包裹格式)
public class GetUserDetailsRequest { }

关键配置对应说明

  • WebInvoke(Method = "POST", UriTemplate = "GetUserData") → 替换为[HttpPost("GetUserData")],直接声明HTTP方法与路由路径
  • RequestFormat/ResponseFormat = WebMessageFormat.Json → 用[Consumes("application/json")]和[Produces("application/json")]分别指定请求、响应的JSON格式
  • BodyStyle = WebMessageBodyStyle.WrappedRequest → 通过[FromBody]参数+请求DTO类实现:原WCF的WrappedRequest会将请求体包裹在与方法名同名的对象中,定义对应请求类即可保持一致的请求格式

服务启动配置(Program.cs)

需在项目启动时配置CoreWCF的Web HTTP绑定,启用REST支持:

var builder = WebApplication.CreateBuilder(args);

// 添加CoreWCF服务依赖
builder.Services.AddServiceModelServices();
builder.Services.AddServiceModelWebServices();

var app = builder.Build();

// 配置CoreWCF服务端点
app.UseServiceModel(serviceBuilder =>
{
    serviceBuilder.AddService<IUserService, UserServiceImplementation>();
    // 使用WebHttpBinding启用REST风格服务
    serviceBuilder.AddServiceEndpoint<IUserService, UserServiceImplementation>(new WebHttpBinding(), "/api");
});

app.Run();

内容的提问来源于stack exchange,提问作者Tech Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 17:12:34