您好BizTalk和WCF专家
在这种情况下,我需要您的帮助来实施:
我创建了一个BizTalk应用程序,该应用程序没有模式,业务流程,而只是带有一个发送端口管道,该管道查看请求消息上的soap操作并将请求发送到正确的目标服务。 我还创建了一个我的发送端口订阅的进程内WCF-Custom接收端口,并定义了以下进程内自定义URL“ http://localhost:8080/bts/services/serviceRoute.svc”。
而不是调用上面提到的URL,我想要一个IIS服务终结点,该终结点可以接收所有请求并将其发送到自定义URL。
所以我想要一个没有特定架构的IIS svc终结点,但是一个服务终结点,无论操作名称是什么,都可以接收任何请求,并将该请求发送到我的BizTalk接收端口(我的WCF-Custom接收端口)。
任何人都可以告诉我如何为这种情况定义或创建IIS服务终结点,或者通过其他任何方式可以解决此问题。
感谢您的帮助。
答案 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);
}
这是一个非常简单的示例,但包含基本逻辑。