|
Home > Archive > BizTalk Server Orchestration > April 2004 > Send Port Groups and Consuming Web Services
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Send Port Groups and Consuming Web Services
|
|
| Eric Z. Beard 2004-04-28, 5:36 pm |
| Hello,
If we use the "New Configured Port" wizard to consume a web service from an orchestration, it is not possible to bind the port to a send port group and call multiple web services as a result of the Send action. Is this by design? I'd like to use BAS to
set up multiple trading partners and use a single orchestration to call a web service that each of them implements, based on a single web request schema. Is this possible? Or were send port groups not meant for web services?
Thanks!
EZB
| |
| Matt Milner 2004-04-28, 10:35 pm |
| When you create the configured port, choose to specify later. then when you
bind your orchestration you should be able to setup a send port group that
contains send ports that are of the SOAP transport type. One thing to keep
in mind is that the send port groups can only have send ports that are not
request/response ports. Since you are sending to multiple locations, you
must just be sending, not requesting a response.
matt
"Eric Z. Beard" <ericzbeard@yahoo.com> wrote in message
news:0B9424F9-6251-4D2F-98D7-A50AC747E4BF@microsoft.com...
> Hello,
>
> If we use the "New Configured Port" wizard to consume a web service from
an orchestration, it is not possible to bind the port to a send port group
and call multiple web services as a result of the Send action. Is this by
design? I'd like to use BAS to set up multiple trading partners and use a
single orchestration to call a web service that each of them implements,
based on a single web request schema. Is this possible? Or were send port
groups not meant for web services?
>
> Thanks!
>
> EZB
| |
| Eric Z. Beard 2004-04-29, 8:36 am |
| Right, that's how to do it *in principle*, but can anyone provide a real working example? I have only been able to consume web services using the "New Configured Port" wizard, which sets up a request-response. Setting up a request only send port to hit
a web service does not seem to work.
Thanks!
EZB
----- Matt Milner wrote: -----
When you create the configured port, choose to specify later. then when you
bind your orchestration you should be able to setup a send port group that
contains send ports that are of the SOAP transport type. One thing to keep
in mind is that the send port groups can only have send ports that are not
request/response ports. Since you are sending to multiple locations, you
must just be sending, not requesting a response.
matt
"Eric Z. Beard" <ericzbeard@yahoo.com> wrote in message
news:0B9424F9-6251-4D2F-98D7-A50AC747E4BF@microsoft.com...[vbcol=seagreen]
> Hello,
an orchestration, it is not possible to bind the port to a send port group
and call multiple web services as a result of the Send action. Is this by
design? I'd like to use BAS to set up multiple trading partners and use a
single orchestration to call a web service that each of them implements,
based on a single web request schema. Is this possible? Or were send port
groups not meant for web services?[vbcol=seagreen]
| |
| Matt Milner 2004-04-29, 1:37 pm |
| If you want to do request only, then I think your web service has to be a
one way service. This causes the WSDL to remove the response message.
I setup the following test method, then created a soap send port (static one
way) and then wrapped a send port group around that. In my orchestration I
marked the port as specify later and then bound it to the send port group.
I can debug the process and see my service getting called. I think the key
is the one way attribute declaration.
[WebMethod]
[SoapDocumentMethod(OneWay=true)]
public void HelloWorld(string name)
{
EventLog.WriteEntry("MyApp", name);
}
Matt
"Eric Z. Beard" <ericzbeard@yahoo.com> wrote in message
news:EDE06DE6-4740-4C42-8624-1042D57D6A3D@microsoft.com...
> Right, that's how to do it *in principle*, but can anyone provide a real
working example? I have only been able to consume web services using the
"New Configured Port" wizard, which sets up a request-response. Setting up
a request only send port to hit a web service does not seem to work.
>
> Thanks!
>
> EZB
>
> ----- Matt Milner wrote: -----
>
> When you create the configured port, choose to specify later. then
when you
> bind your orchestration you should be able to setup a send port group
that
> contains send ports that are of the SOAP transport type. One thing
to keep
> in mind is that the send port groups can only have send ports that
are not
> request/response ports. Since you are sending to multiple locations,
you
> must just be sending, not requesting a response.
>
>
>
> matt
>
>
> "Eric Z. Beard" <ericzbeard@yahoo.com> wrote in message
> news:0B9424F9-6251-4D2F-98D7-A50AC747E4BF@microsoft.com...
service from[vbcol=seagreen]
> an orchestration, it is not possible to bind the port to a send port
group
> and call multiple web services as a result of the Send action. Is
this by
> design? I'd like to use BAS to set up multiple trading partners and
use a
> single orchestration to call a web service that each of them
implements,
> based on a single web request schema. Is this possible? Or were
send port
> groups not meant for web services?
>
>
>
| |
| Eric Z. Beard 2004-04-29, 3:37 pm |
| Hi Matt,
Thanks for the response. I thought of doing it that way, but I would like to record the response from each web service call, so a void return type won't work for this case.
As a workaround, I'm trying this: drop the message off using the FILE adapter to a send port group, and each one of the multiple send ports then submits the message to a new orchestration (using FILE again), which hits the separate web services. I can us
e dynamic web binding to call them, but I still need to come up with a way to pass the URI into the new orchestration, since the message itself is generic.
Thanks!
EZB
----- Matt Milner wrote: -----
If you want to do request only, then I think your web service has to be a
one way service. This causes the WSDL to remove the response message.
I setup the following test method, then created a soap send port (static one
way) and then wrapped a send port group around that. In my orchestration I
marked the port as specify later and then bound it to the send port group.
I can debug the process and see my service getting called. I think the key
is the one way attribute declaration.
[WebMethod]
[SoapDocumentMethod(OneWay=true)]
public void HelloWorld(string name)
{
EventLog.WriteEntry("MyApp", name);
}
Matt
| |
| Matt Milner 2004-04-30, 1:37 pm |
| What is it you are trying to do exactly? It sounds like you need to call
out to multiple services, and then get the response back, but you need the
addresses of those services to be dynamic. Is that correct?
If so, then you should be able to do some looping and use the business rules
engine to provide your logic for coming up with the addresses you want based
on the rules you need to apply in your particular case.
If you know that you'll be calling a set number of services each time, you
could use the parallel shape and role links to do this as well. This sounds
like, reading your initial post, more like what you want to be doing. I
don't know that the send port group idea is not supported for web services
so much as the concept of sending out one message in a request response
mechanism and getting multiple responses may not be supported.
Matt
"Eric Z. Beard" <ericzbeard@yahoo.com> wrote in message
news:025E7862-C9B3-4FA5-AE97-4C3A3C2353CD@microsoft.com...
> Hi Matt,
>
> Thanks for the response. I thought of doing it that way, but I would like
to record the response from each web service call, so a void return type
won't work for this case.
>
> As a workaround, I'm trying this: drop the message off using the FILE
adapter to a send port group, and each one of the multiple send ports then
submits the message to a new orchestration (using FILE again), which hits
the separate web services. I can use dynamic web binding to call them, but
I still need to come up with a way to pass the URI into the new
orchestration, since the message itself is generic.
>
> Thanks!
>
> EZB
>
> ----- Matt Milner wrote: -----
>
> If you want to do request only, then I think your web service has to
be a
> one way service. This causes the WSDL to remove the response
message.
> I setup the following test method, then created a soap send port
(static one
> way) and then wrapped a send port group around that. In my
orchestration I
> marked the port as specify later and then bound it to the send port
group.
> I can debug the process and see my service getting called. I think
the key
> is the one way attribute declaration.
>
>
> [WebMethod]
> [SoapDocumentMethod(OneWay=true)]
> public void HelloWorld(string name)
> {
> EventLog.WriteEntry("MyApp", name);
> }
>
>
> Matt
>
>
| |
| Eric Z. Beard 2004-04-30, 2:35 pm |
| Hi Matt,
I have one message that needs to go out to multiple partners. It's the same message for all partners, and it is delivered by hitting a web service method that they all implement. I need to record the result from each one of them as a receipt that they g
ot the message.
I ran into problems with the loop because if I use any list/enumerator type of object, I get the error that says my orchestration needs to be atomic, since the type isn't serializable. (It gives me this error even with an XmlNodeList). I can't have an a
tomic orchestration if I'm looping over web service calls, because if the first one times out or breaks, that just means that one partner didn't receive the message, and I want the process to continue.
Another idea I had is to have multiple SQL receive port locations, each one with the proper query to get the URI of the partner's web service, so instead of one orchestration instance running, it's multiple instances of one orchestration. The problem wit
h this approach is that it requires someone to crack open Biztalk Explorer, add a location and write a query to add or remove partners.
Of course, it would be relatively trivial to write custom code to do this, but I really want to be able to use HAT to monitor and troubleshoot each stage of message transmission.
The "parallel shape and role links" sounds interesting, but it might be difficult to add and remove partners, which is going to happen fairly often.
EZB
----- Matt Milner wrote: -----
What is it you are trying to do exactly? It sounds like you need to call
out to multiple services, and then get the response back, but you need the
addresses of those services to be dynamic. Is that correct?
If so, then you should be able to do some looping and use the business rules
engine to provide your logic for coming up with the addresses you want based
on the rules you need to apply in your particular case.
If you know that you'll be calling a set number of services each time, you
could use the parallel shape and role links to do this as well. This sounds
like, reading your initial post, more like what you want to be doing. I
don't know that the send port group idea is not supported for web services
so much as the concept of sending out one message in a request response
mechanism and getting multiple responses may not be supported.
Matt
|
|
|
|
|