cancel
Showing results for 
Search instead for 
Did you mean: 

How to re-use one SOAP Sender Channel for two different messages?

Former Member
0 Kudos

Hi!

I have an XI Proxy to SOAP Sync Scenario. 5 messages uses only 2 channels - cc_XI_Sender and cc_SOAP_Receiver. All messages comes from one Sender Channel and goes to one Receiver channel, and it works fine.

When I make the same for SOAP to XI Proxy Sync Scenario, I've got a problem. For example I have 2 different messages (mi_so_MSG_ONE and mi_so_MSG_TWO), so it works, if I had a two different sender channels (cc_SOAP_R1 and cc_SOAP_R2).

If I set the same Sender Channel in both Sender Agreements (cc_SOAP_R1), only one message (mi_so_MSG_ONE) goes without errors. When I send a second message (mi_so_MSG_TWO), in SXMB_MONI this message comes from Business System (BS_TEST) as message type one (mi_so_MSG_ONE), and then in stage of transformation in Interface Determination goes to message mapping program for other kind of messages (MM_MSG_ONE_to_XI_PROXY). And then - error in message mapping.

I try many URLs for both messages:

1) http://host:port/XISOAPAdapter/MessageServlet?channel=:BS_TEST:cc_SOAP_R1&version=3.0&Sender.Service...&Interface=

2) http://host:port/XISOAPAdapter/MessageServlet?channel=:BS_TEST:cc_SOAP_R1&version=3.0&Sender.Service...

3) http://host:port/XISOAPAdapter/MessageServlet?channel=:BS_TEST:cc_SOAP_R1&version=3.0&Sender.Service...

Message in payload:


<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<!--  Inbound Message   --> 
<MSG_TWO xmlns="urn:xxx:yyy:MyNameSpace" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">... some fields... </MSG_TWO>

But in SOAP Header I see that is NOT second message!

 <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
< !--  Inbound Message   --> 
<SAP:Main>
  <SAP:MessageClass>ApplicationMessage</SAP:MessageClass> 
  <SAP:ProcessingMode>synchronous</SAP:ProcessingMode> 
  <SAP:MessageId>93233F70-3E2F-11DF-8CD3-00237D301CD6</SAP:MessageId> 
  <SAP:TimeSent>2010-04-02T08:13:09Z</SAP:TimeSent> 
  <SAP:Sender>
    <SAP:Service>BS_TEST</SAP:Service> 
    <SAP:Interface namespace="urn:xxx:yyy:MyNameSpace">mi_so_MSG_ONE</SAP:Interface> 
  </SAP:Sender>
  <SAP:Interface namespace="urn:xxx:yyy:MyNameSpace">mi_so_MSG_ONE</SAP:Interface> 
  </SAP:Main>

Is it correct that many kinds of messages cannot goes through one Sender Channel ? If not... How can I reuse one SOAP Sender Channel for both this messages?

Thanks for helping.

Accepted Solutions (0)

Answers (3)

Answers (3)

former_member200962
Active Contributor
0 Kudos

The Restriction to use one SOAP channel for one interface exists in SAP PI7.0 as we specify the name and namespace of the sender Message Interface.

However if you are using SAP PI7.1, then we do not specify the sender message details in the channel and hence can re-use the same sender channel....by just changing the interface name in the URL.....you can refer the below URL format:

http://<IPAddress OR ServerName>:<PORT_No>/XISOAPAdapter/MessageServlet?channel=:<SenderBusinessService>:<SenderSOAPCC>&version=3.0&Sender.Service=<SenderBusinessService>&Interface=<SenderInterfaceNamespace>%5E<SenderMI>

Regards,

Abhishek.

Former Member
0 Kudos

Hi, Abhishek!

I use exacly this URL format, with %5E between namespace and SI name. But... maybe I make something wrong?

I already have two messages, with two channels and so on. And it works. At first I change one Sender Agreement to taking two messages from one channel, then I make a WSDL for both this messages, then I try to send both messages from Oxigen (Oxigen is an XML-tool like Altova XMLSpy). In this tool I can see this URL, first message works fine, another message fails in mapping program for first message, becouse PI thinks that is a first message. I make a new Sender Channel for both messages, and change both Sender Agreements for using this one Sender Channel - nothing happins: first message works, second fails in message mapping for first message. And what's wrong?

Thanks for your answer.

former_member200962
Active Contributor
0 Kudos
becouse PI thinks that is a first message

You should be using two different Sender Agreements, two receiver Determinations and two Interface Determinations....because each of these ID objects refer the Source SI and hence cannot be re-used....in the two Sender Agreements you can use the same SOAP channel.

Former Member
0 Kudos

At first I change one Sender Agreement to taking two messages from one channel...

Sorry!

I means, I have two different Sender Agreements, in each of this I set a different channels, and with this settings everything works fine.

Then I change in one of this Sender Agreements the name of Sender Channel parameter to channel which uses in second Sender Agreement. Then I makes a new one channel and set this name in both Sender Agreements. So, everytime I had two different Sender Agreements, which not differ except the name of Sevice Interface. And when I set the same channel name for both Sender Agreements, one message works, second - fails.

And I don't understand why...

Former Member
0 Kudos

Hi Vsevolod,

If you are using PI 7.1 then you should be using the below mentioned URL for invoking the call to the SOAP Adapter . This can be used in cases where you don't want to have 1:1 relation between sender agreement and sender channel.

http://host:port /XISOAPAdapter/MessageServlet?senderParty=FP& senderService=FS& interface=IF&receiverParty=TP&receiverService=TS&interfaceNamespace=IFNamespace

The reason for doing so is if you use the URL mentioned in previous replies, then Soap Adapter would do the lookup for agreement based on channel ID and what will happen is the first found agreement would be taken and hence the IF and IF NS for that one are taken. If you use the above URL it would do a lookup for sender agreement with all the values you specify in the URL. Hence you will get the right agreement.

Can you please check and confirm if this works for you..

Best Regards,

Pratik

Former Member
0 Kudos

Hi,

I have a pretty simmilar problem. We're on a NW 7.31 AEX System, so Java-only.

We have a synchronous Scenario SOAP -> PI -> SOAP (SAP Backend).

The Sender-System uses this URL to call the SOAP Channel:

https://host:port/XISOAPAdapter/MessageServlet?senderParty=&senderService=FS&receiverParty=&receiverService=&interface=IF&interfaceNamespace=IFNamespace

(only bold marked parameters are filled)

Now I've got the requirement for an identical Interface, just for another Backend-System. So I want to reuse everything possible from the already established Scenario.

Now my question:

In URL everything stays the same senderService, interface and intefaceNamespace. Is it enough for PI to fill receiverService for the new and existing Scenario to divide the Requests for the two Systems?

(Example: https://host:port/XISOAPAdapter/MessageServlet?senderParty=&senderService=FS&receiverParty=&receiverServiceTS=&interface=IF&interfaceNamespace=IFNamespace)


Do I have to create a new Integrated Configuration or is it possible to add a Receiver Determination to the existing? If it is possible, how can I do the Rule Definition for the Receiver Determination?

Best regards

Michael

Former Member
0 Kudos

Hi,

One SOAP Sender (WS) can have one structure. You can't assign more then one as far as I know. But if the structures of both messages are the same, maybe you could use just one Message interface and inside this interface you could define one tag which indicates the message. (If the structures are the same) If they are different you should use a 2. comm. channel.

Hope it is clear

Former Member
0 Kudos

Thanks for answers!

It means a webservice application will be deployed and exposed in PI using the associated Message Interface and its namespace information in the SOAP Sender channel.

It means only one Sender Channel per one pair of names (name of Message Interface and name of namespace). And it will fail if I change something. And question is: why URL for sending SOAP message contains parameter "Interface"?

"backward compatibility" or "for future use only"?

Nothing happens when I change this parameter, seems that name of Interface comes from first of founded Sender Agreements.

If the structures are the same

No. Structures are different.

Making one structure per all SOAP incoming messages looks workable, but... looks strange (in fact I have a lot of SOAP messages, more than 100 Sender channels).

I found an information, that I can use one Sender channel per many messages with different structures only if I make this messages like different Operations in one Service Interface (in PI 7.1).

But in this case in list of messages in SXMB_MONI I will see only a one name of Service Interface for all my messages and it's not so comfortably for supporting: to take a name of operation that fails I need to goes inside.

In older version of XI (prior 7.1) using one sender channel per many messages allowed without any hints.

former_member200962
Active Contributor
0 Kudos
In older version of XI (prior 7.1) using one sender channel per many messages allowed without any hints.

Not allowed in lower versions.

former_member181985
Active Contributor
0 Kudos

SOAP on Sender side uses message Interface, hence you can only send that message type only. If you send a different message it will fail.

It means a webservice application will be deployed and exposed in PI using the associated Message Interface and its namespace information in the SOAP Sender channel.

Regards,

Praveen Gujjeti

Edited by: Praveen Gujjeti on Apr 2, 2010 6:41 PM