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



你好,BizTalk和WCF专家

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

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

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

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

有人能告诉我如何为这种情况定义/创建IIS服务端点,或者用任何其他方法解决这个问题吗。?

谢谢你的帮助。。

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

BizTalk接收位置未绑定到架构。他们很乐意接受任何类型的消息。唯一的验证发生在你实现它的时候

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

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

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

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

这将接收任何消息,包括非soap消息,因此您可以创建路由逻辑
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);
}

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

最新更新