我是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中执行此操作的主要障碍是什么?如果您有任何链接,请尽可能传递。
答案 0 :(得分:2)
我相信您将OperationContract属性上的name属性指定为“*”以接受所有请求。要使参数本身与模式无关,它应该是System.ServiceModel.Channels.Message类型。
答案 1 :(得分:1)
您正在构建的是“WCF路由器”。
最新的.NET版本中包含一个可配置的Routing Service。
如果路由服务不能满足您的需求,则可以构建自己的路由器,但在需要安全消息时可能会变得非常复杂。这组MSDN文章是最好的资源。他们回答您关于如何让服务接受任何消息的问题,然后继续讨论解决和安全问题。