从 WCF 服务调用 Web API 端点
Posted
技术标签:
【中文标题】从 WCF 服务调用 Web API 端点【英文标题】:Calling Web API endpoint from WCF service 【发布时间】:2015-11-16 20:21:00 【问题描述】:我正在尝试从我的 WCF 服务调用 Web API 端点,这是代码;
private static async Task RunAsync(string message)
var model = new MyModel
Message = message
;
using (var client = new HttpClient())
client.BaseAddress = new Uri("http://localhost/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PostAsJsonAsync("api/RecordMessage", model);
我得到的响应是“404”。我可以从控制台应用程序发布消息,但我无法让它在我的 WCF 服务中运行它。我尝试将 Expect100Continue 设置为 true,但似乎并非如此。
我的 WCF 托管在 IIS 中。有人遇到过同样的问题吗?
【问题讨论】:
您的 Web API 托管在哪里?您提到您的 WCF 服务托管在 IIS 中,但是您调用的端点呢? 它也托管在 IIS 中 在 80 端口上,和你的 WCF 应用程序一样吗? 不,WCF 使用 https:443。但是 Web API 使用的是 80。 【参考方案1】:您正在尝试 POST 到 /api/RecordMessage
端点。如果您使用的是默认路由配置:
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/controller/id",
defaults: new id = RouteParameter.Optional
);
这意味着您必须有一个名为 RecordMessageController
的控制器,其中包含一个名为 Post
的方法:
public class RecordMessageController: ApiController
public HttpResponseMessage Post()
... That's the action that will be invoked when you call
... POST /api/RecordMessage
【讨论】:
我可以从控制台应用程序发布消息,但我无法让它在我的 WCF 服务中运行,因此控制器没有问题。 如果您在控制台应用程序中使用相同的客户端代码,那么它没有理由不能在 WCF 应用程序中工作。 WCF 的性质没有什么特别的地方会使您的请求因 404 而失败。 以下是我可能建议您进一步调试此问题的建议:您可以在控制台应用程序中启用跟踪并捕获正在发送的确切 HTTP 请求。然后在您的 WCF 应用程序中执行相同的操作并比较结果,看看它们有何不同。 它们似乎也一样,我在想如果我错过了 IIS 上的设置。 如果您发出 2 个相同的请求,无论它们来自控制台应用程序、WCF 应用程序、用 Python 编写的脚本、Fiddler 作曲家 -> 它们都可以工作或全部工作以 404 失败。因此,您似乎没有从 WCF 应用程序发出相同的请求。以上是关于从 WCF 服务调用 Web API 端点的主要内容,如果未能解决你的问题,请参考以下文章
将 WCF 转换为 WEB API:在 WEB API 中使用包装器重用 WCF 服务是个好主意吗?