0

我是 WCF 新手,但对 C# 和 .Net 并不陌生。我正在使用 Visual Studio 2008 和 .Net 3.5。

我正在尝试构建一个可以接收任何入站请求 XML 和任何命名空间的 Web 服务。它的行为就像一个透明的接收器,只是接收入站请求 XML。

一旦我收到请求,我将把它传递给一些自定义的 .Net C# 项目,以调用 MQPUT 到 IBM MQ 系列。

现在我有 WCF Web 服务应用程序接收一个称为 RunTest() 的通用入站操作。我将 WSDL 使用到 SoapUI 中,构建了一个示例请求和断点,它可以工作。但是,当我尝试传递我们公司的请求 XML 时,它并没有落在断点上。

这是ServiceContract和Operation:

[ServiceContract(Name="IService1",Namespace="cfg-env=http://www.co.com/schemas/cfg-     env/")]
//[ServiceContract]
public interface IService1
{


[OperationContract]
void RunTest();

[OperationContract]
void CFX();

以下是操作方法:

public void RunTest()
{  <<<it does break here using the request from the WSDL
string serviceName;
string queueManager;
string queue;
string requestMessage;

//Capture the Service Name
serviceName = "";

//Save the QueueManager
queueManager = "";

//Save the Request Queue
queue = "";

//Save the Message
requestMessage = "";

//Call MQ Put
Engine eng = new Engine();
try
{
eng.Put(serviceName, queue, requestMessage, queueManager);            
}

我需要做的主要事情是接收入站 XML,查询它以获取一些信息,然后调用此方法在 MQ 上执行 MQPUT 功能。

入站命名空间看起来像上面的,但我想确保我可以接收和询问任何可能是命名空间限定的 XPATH。如果必须,我可以专门使用 cfg-env 命名空间前缀,因为我们的服务确实使用它作为标准。

在 VS 2008 WCF 中这样做的主要障碍是什么?如果您有任何链接,请尽可能传递它们。

4

2 回答 2

2

我相信您将 OperationContract 属性上的 name 属性指定为“*”以接受所有请求。要使参数本身与架构无关,它应该是 System.ServiceModel.Channels.Message 类型。

于 2013-04-16T21:27:52.833 回答
1

您正在构建的是“WCF 路由器”。

最新的 .NET 版本中包含一个可配置的路由服务

如果路由服务不能满足您的需求,则可以构建自己的路由器,但当需要安全消息时会变得非常复杂。这组 MSDN 文章是最好的资源。他们回答了您的问题,即如何让服务接受任何消息,然后继续解决和安全问题。

构建 WCF 路由器,第 1 部分

构建 WCF 路由器,第 2 部分

于 2013-04-17T15:03:22.847 回答