【问题标题】:Build WCF web service that listens for inbound events构建侦听入站事件的 WCF Web 服务
【发布时间】:2011-09-11 05:01:50
【问题描述】:

我有一个外部供应商为其下游客户端提供事件通知功能。他们要求我们执行以下步骤以在我们公司内实施事件通知,以接收来自外部供应商的通知。我提供了供应商网站中列出的事件通知的粗体字。

为了在与我们的实时集成场景中使用我们的事件通知,您需要...

创建一个服务来实现我们的“通知”WSDL 最新 我们的“通知”服务的 WSDL 可以在我们的 API 中找到 “通知”服务部分下的文档。这 从 Workday 发送到您的服务的 SOAP 消息传递一个 回调中使用的事件 (Event_ID) 的唯一标识符 到 Workday 以检索活动的其他信息

我已经构建了一个 WCF Web 服务外壳,并创建了一个对通知 WSDL 的服务引用,正如在外部供应商网站上发布的那样。之后,我不确定我需要做什么。 Web 服务需要执行下面解释的这两个步骤..

  1. 当事件发生在外部供应商端时,会根据供应商端配置的端点发送通知消息。所以我的网络服务应该主动监听这些消息。收到消息后,我将捕获事件 ID 并进行回调以获取有关数据的更多数据。
  2. 一旦我有了事件数据,我会按照我们的业务逻辑处理它(我这里没问题)

第 1 步需要帮助,对于构建一个用于侦听外部事件的消耗性 Web 服务有点陌生。我不知道从哪里开始。

【问题讨论】:

标签: c# wcf wcf-binding


【解决方案1】:

您需要向供应商提供您的应用程序的 URL - 这可能意味着

1) 在面向公众的服务器上托管并在该服务器上进行开发

2) 从供应商站点到您的站点有某种 vpn,以便他们可以直接与您的服务器对话

3) 让您的基础架构人员在防火墙上设置一些规则,以允许来自供应商站点(IP 地址限制)的请求直接路由到您的开发机器

选项 3) 是我的首选开发选项(简单),然后是 1) 长期托管。

【讨论】:

  • 我们将使用第三个选项。但是我的问题是如何构建 Web 服务来处理这些通知?
  • @Shaun Wilde 选择 3 的更安全方法是将服务托管在您的 DMZ 中,并将消息放入队列中,然后由防火墙后面的某些实体主动拉取。基础架构中打开的端口越少越好。
  • @havardhu - 我同意 - 但他想反其道而行之;所以你的方式需要部署一个未经测试的应用程序 - 或者当然让他自己的客户端推送测试消息 - 作为对他的评论的回应,他正在考虑消息(可能是 NServiceBus)以及 wsdl 实用程序或 svcutil。
  • @wcfvemi - 如果它是一个简单的服务; wsdl.exe 是创建服务的最简单方法。但是我假设您想使用 WCF,似乎可以使用 svcutil - 请参阅此博客文章 blogs.msdn.com/b/dotnetinterop/archive/2008/09/24/…
  • 如上所述,我已经在供应商通知 WSDL 中进行了采购,并在我的 Web 服务中创建了一个服务引用(代理类)。我不知道在那之后该怎么办.. 我在 Web 服务创建中的下一步是什么?如何让 Web 服务“监听”我需要帮助的外部事件?
【解决方案2】:

我知道这是旧的,但有一个答案。 svcutil 可以为您做到这一点。

svcutil.exe /language:C# /out:MyService.cs Notification.wsdl /syncOnly

这将生成您需要的大部分内容,但它也会为您提供不需要的客户端代码。您可以从它生成的 MyService.cs 文件中删除该部分。如果您使用的是 .NET 4.5,您可以添加 /serviceContract 选项,它只会生成特定于服务器的代码。

这听起来像是在为Workday Notifications 编写网络服务。此 wsdl 使用了一些 svcutil 不会传输到生成的 .cs 文件的枚举。如果您关心这一点,则需要手动将这些字符串属性更改为具有 wsdl 中指定的值范围的枚举。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多