【问题标题】:svc service that can recieve any request可以接收任何请求的 svc 服务
【发布时间】:2018-07-18 13:26:40
【问题描述】:

您好 BizTalk 和 WCF 专家

我需要你的帮助来实现这个场景:

我创建了一个 BizTalk 应用程序,它没有架构、业务流程,但只有一个发送端口管道,该管道查看请求消息上的肥皂操作并将请求发送到正确的目标服务。 我还创建了一个进程内 WCF 自定义接收端口,我的发送端口订阅了该端口,并且我定义了以下进程内自定义 URL“http://localhost:8080/bts/services/serviceRoute.svc”。

我想要一个 IIS 服务端点来接收所有请求并将其发送到任何自定义 url,而不是调用上面提到的 URL。

所以我想要一个没有特定架构的 IIS svc 端点,但是一个服务端点可以接收任何请求,无论操作名称如何,并将请求发送到我的 BizTalk 接收端口(我的 WCF 自定义接收端口)。

谁能告诉我如何为这个场景定义/创建一个 IIS 服务端点或者我可以解决这个问题的任何其他方式。?

感谢您的帮助..

【问题讨论】:

    标签: wcf biztalk svc biztalk-2013r2


    【解决方案1】:

    非常重要的一点:BizTalk 已经做到了这一点。您不需要额外的 IIS 服务。

    BizTalk 接收位置不受架构约束。他们会很乐意接受任何消息类型。如果你实现它,唯一的验证就会发生。

    因此,我将从托管 In-Process 或 IIS 或 WCF-BasicHttp/basicHttpBinding 的普通 WCF-WebHttp 端点开始,以自动提升操作(IIRC,已经有一段时间了;)。

    您可以在 IIS 中配置 URL、安全性以及您不需要的任何方式。

    【讨论】:

      【解决方案2】:

      用一个接收System.ServiceModel.Channels.Message类的方法创建一个服务,像这样的接口:

      [ServiceContract(Namespace = "http://yournamespace")]
      public interface IRouter
      {
          [OperationContract(Action = "*", ReplyAction = "*", Name = "*")]
          [WebGet]
          Message RouteMessage(Message incomingRequest);
      }
      

      这将接收任何消息,包括非肥皂消息,因此您可以创建路由逻辑。
      Message 类有一些有用的成员,例如 Headers 属性和 CreateMessage 方法,您可以使用它们创建原始消息的副本并重定向到其目的地,或者只是提取数据以进行日志记录。

      编辑添加一些信息(cmets中的一些疑问)
      使用上面的代码,您可以简单地将传入消息重定向到另一个端点,如下所示:

      /* "endpointConfigurationName" is the name of a client endpoint, that is in Web.config, like this for instance:
      <endpoint name="endpointConfigurationName" binding="basicHttpBinding" bindingConfiguration="someBindingConfiguration" behaviorConfiguration="someBehaviorConfiguration" contract="IRouter" />
      notice that there is not an address defined, you can define in code */
      
      using (var factory = new ChannelFactory<IRouter>("endpointConfigurationName", new EndpointAddress("http://destinationEndpoint")))
      {
          // create a channel to send the resquest 
          IRouter router = factory.CreateChannel();
          // get the response
          var reply = router.ProcessarMensagem(incomingRequest);
      }
      

      这是一个非常简单的示例,但包含基本逻辑。

      【讨论】:

      • 感谢您的回答和样品。但我不想实现自己的路由器,但正如我提到的,我希望我的 reveive 端口监听可以接收任何请求的 iis 服务端点。你能给我一个实现的样本吗!
      • 如果是请求-响应服务,我可以使用您的路由示例吗?
      • @Balatharan 为清楚起见,如果您使用的是 BizTalk,则无需执行此操作。 BizTalk 是路由服务。
      猜你喜欢
      • 2018-01-28
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 2021-01-06
      相关资源
      最近更新 更多