I have an Atomic orchestration (i.e. orchestration transaction type is set to "Atomic") which is suppose to call/consume the 3 web services and I have kept all these 3 webservice calls within an scope shape with transaction type = "None", so that I can have exception handler to catch the Soap exceptions but when I compile the orchestration I am getting the below compile time error:
"an atomic scope may not contain or call a service or scope that contains both the send and the corresponding receive of a requestresponse operation on a 'uses' port or servicelink "
Does it mean that I can't call web services in an orchestration whose transaction type is set to "Atomic" or it has something to do with the scope shape I am using to call the web services whose transaction type is set to none ???
Please do let me know. Thanks.
Technically here if you are calling the web service it can take time equal to the timeout of the web service and BizTalk engine can dehydrate the instance in the meantime. If the receive shape is in the atomic scope it cant do so that is why you are getting this error.
Select the orchestration and then see if the orhcestration is set to Atomic. Change it to Long-running or none whatever your requirement is.
Yes the orchestration transaction type is set to "Atomic" and the reason for that is I need to execute a pipeline from the orchestration and when u declare a varibale to receive the output messages from the pipeline, for declaring this variable the orchestration transaction type needs to be set to "Atomic"... or is there a way around for this ???
See how the transactions work in BizTalk in brilliant article by Charles Young "BizTalk Server 2006: The Compensation Model" http://geekswithblogs.net/cyoung/articles/1004
Hi Abdul,You can follow my blog post and the comments for the solution. The solution is also downloadable.
Yes the orchestration transaction type is set to "Atomic" and the reason for that is I need to execute a pipeline from the orchestration and when u declare a varibale to receive the output messages from the pipeline, for declaring this variable the orchestration transaction type needs to be set to "Atomic"... or is there a way around for this ???
http://abdulrafaysbiztalk.wordpress.com/2008/08/10/calling-send-and-receive-pipelines-from-the-orchestration-expression-shapes/
You can have the atomic scope out of the other scopes as shown in my orchestration diagram. The transaction set to none and the exception block is also within the atomic scope. I think this should resolve your problem.
Does it mean that I can't call web services in an orchestration whose transaction type is set to "Atomic" or it has something to do with the scope shape I am using to call the web services whose transaction type is set to none ???
You have probably already received enough help to get you through your issues, but let me just quickly address this question.
You cannot ahve both the send- and the receive shapes for a request-response port in the same Atomic scope, be it a Scope shape or inside an orchestration that is marked as atomic. This is because for Atomic scopes, BizTalk needs to guarantee the ACID properties for transactions, which also means that the messages that are sent out in an Atomic shape are not released to the send port until the Atomic shape has finished. Otherwise the messages might end up at the receiver and the transaction can fail later on. If the message to the send port is not released until the Atomic shape is finished, this naturally means that you cannot have the Receive shape in the Atomic scope, since there is never a message to receive until after the Atomic scope has finished, and you would then have a deadlock.
There's one confusion here, for exceuting the pipeline I have declared a variable InputPipeline of type Microsoft.XLANGs.Pipeline.ReceivePipelineOutputMessages and obviously this is declared as you would normally declare any variable to be used across the orchestration and executing the below code from an Atomic scope
InputPipeline = Microsoft.XLANGs.Pipeline.XLANGPipelineManager.ExecuteReceivePipeline(typeof(Project.pipelines.XmlDecrypt),InputMessage);
Even now that I am using the Inputpipeline variable in a Atomic scope I am still getting the below error, I mean is there anything wrong with the way I have declared the variable ...
a non-serializable object type 'Microsoft.XLANGs.Pipeline.ReceivePipelineOutputMessages InputPipeline' can only be declared within an atomic scope or service
I went thru Abdul's blog it says "A variable (ReceivePipelineOutput) of this type is created in the atomic scope variables", what does this really mean and how do I create a variable in the atomic scope bcoz the InputPipeline variable I have created is the way we normally create all the variables, please do let me know. Thanks.
I went thru Abdul's blog it says "A variable (ReceivePipelineOutput) of this type is created in the atomic scope variables", what does this really mean and how do I create a variable in the atomic scope bcoz the InputPipeline variable I have created is the way we normally create all the variables, please do let me know. Thanks.
In "Orchestration View" you can find the Scope, and if you open it, you can see that you can declare messages, variables and correlation sets that are specific to that scope. Create your variable there (you can drag it there).
Hi I am also facing the same issue i will get a batch file i have to de-Batch(I am using a pipeline which runs under atomic scope) the file and i should call a wcf service for processing and then i will get a de-Batch response and before sending i have to do batching and then send the batched file.
when i try to build its showing "an atomic scope may not contain or call a service or scope that contains both the send and the corresponding receive of a requestresponse operation on a 'uses' port or servicelink"
Any Idea on this Error and approach.
Thanks in advance.