可以接收任何请求的svc服务

时间:2018-07-18 13:26:40

标签: wcf biztalk svc biztalk-2013r2

您好BizTalk和WCF专家

在这种情况下,我需要您的帮助来实施:

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

而不是调用上面提到的URL,我想要一个IIS服务终结点,该终结点可以接收所有请求并将其发送到自定义URL。

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

任何人都可以告诉我如何为这种情况定义或创建IIS服务终结点,或者通过其他任何方式可以解决此问题。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

使用接收System.ServiceModel.Channels.Message类的方法来创建服务,例如此接口:

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

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

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

/* "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);
}

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