如何允许所有操作和命名空间

时间:2013-04-16 20:50:01

标签: wcf

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

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

收到请求后,我将把它传递给一些自定义的.Net C#Project来调用MQPUT到IBM MQ Series。

现在我让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中执行此操作的主要障碍是什么?如果您有任何链接,请尽可能传递。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

最新的.NET版本中包含一个可配置的Routing Service

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

Building a WCF Router, Part 1

Building a WCF Router, Part 2