I've created a flat file schema in Visual Studio from an instance of a CSV file I have, and it validates fine, and I've hooked up an orchestration to send and receive ports set to expect a file of that schema. When I publish the orchestration and use it to pick up a file, it's immediately suspended, with the following error:
The published message could not be
routed because no subscribers were
found. This error occurs if the
subscribing orchestration or send port
has not been enlisted, or if some of
the message properties necessary for
subscription evaluation have not been
promoted. Please use the Biztalk
Administration console to troubleshoot
this failure.
The send port is enlisted, and since I'm not doing any processing based on the contents, I don't think I need to promote anything. I'm currently using the PassthroughReceive pipeline - the other three pipelines I have give me errors about not being able to disassemble the file, as it seems they're expecting XML.
Am I missing something obvious here? Or, in other words:
Can I pass the contents of a CSV file
to my orchestration without a custom
pipeline?
Yes, when you create a custom flat file schema, you need to create a custom pipeline (a receive pipeline in this case), add the FlatFile Disassembler component to it and then configure its properties with your custom flat file schema.
Then you need to configure your receive port to use this receive pipeline.
Related
I have an BizTalk+ESB itinerary with a Itinerary Service to route the data to a web service, using a static resolver.
When I make the request I get this error:
"The document type "http://schemas.xmlsoap.org/soap/envelope/Envelope" does not match any of the given schemas."
I added Envelope.xsd to my itinerary and set the Document schema in the XmlDisassembler
and set the Envelope schema also
I have the itinerary call to the service set up as:
The service is running, and I restart the hosts every time I update the pipeline.
I'm using the schema from http://schemas.xmlsoap.org/soap/envelope/Envelope
I've been checking online and it looks as though I need to modify the schema to include the structure of the incoming message. Is that correct? I assumed that ESB would create the correct message envelope. It looks as though this is not the case.
Anyone have any advice on how I should proceed with this?
I'm a bit confused on what the biztalk wcf publishing wizard produces?
So for example, I have a simple biztalk project that takes a Input xml file, maps it, and outputs to another folder.
Can i use the wcf publishing wizard to create a webservice to pass in and out an xml to the solution?
Yes you can. WCF Publishing wizard is for this purpose. You can either expose your schema as a service or your Orchestration. It has few options to choose e.g. whether you want to use BasicHttpBinding, WSHttpBinding or custom. You should have a local IIS configured for this. It will also create a receive location in BizTalk to receive the message from IIS service and return the response.
More details about it can be found on http://msdn.microsoft.com/en-us/library/bb226547.aspx
To answer your specific question, yes, you would 'publish' the schemas.
To note, there is no difference in the output of either option. Publishing an Orchestration merely reads some metadata from the compiled Assembly. If you set the same values when publishing 'Schema', the output metadata will be the same.
Also note, the IIS endpoint is completely schema agnostic, meaning it makes no attempt to validate the messages it receives or sends, regardless of what Schemas or Orchestration Port you 'publish'.
I have the following itinerary:
A one way receive location passes a message to an orchestration where an inner message is extracted (unable to do this in a map).
The returned message from the orchestration is then mapped and the
result of that map, mapped again. Using the Microsoft.Practices.ESB.Services.Transform service.
This is then passed to a web service, via the Microsoft.Practices.ESB.Services.Routing service, which fires fine but I am not receiving the expected response which I want to write to file. The message that does get written to the file is the message passed to the web service rather than the expected response. Testing the web service using a simpler itinerary i.e. one without orchestration extenders shows that the web service works as expected.
The OffRamp is from the GlobalBank.ESB example application.
How can I get the required response from the web service?
So finally managed to find a solution to this for which I have to give full credit to this guy
The problem is Microsoft.Practices.ESB.Services.Routing Service only provides one way operation, so even if you mark your resolver with two-way message exchange pattern it wont work.
If you check Microsoft.Practices.ESB application in BizTalk Admin console, it has one one way dynamic send port Microsoft.Practices.ESB.Agents_2.1.0.0_Microsoft.Practices.ESB.Agents.Delivery_DeliveryPort_31bf3856ad364e35 which is bound to orchestration Microsoft.Practices.ESB.Agents.Delivery. When you use Orchestration extender and use Microsoft.Practices.ESB.Services.Routing service, this port is used to send any call and because this is one way port, you do not get response.
You need to use a Two-way orchestration in callwebservice shape. A sample Two-way orchestration is in MultipleWebServices ESB Sample. If you deploy that orchestration and register it as itinerary service and use it in callwebservice shape, it will work.
and it more or less did :) Deploy the orchestration and register it to the ESB as an itinerary service by adding an entry to the esb config between the itineraryServices node:
<itineraryService id="04BD6120-06E4-43D3-A56F-2FF061D59862" name="ESB.MultipleWebServices.Orchestrations.TwoWayRouting" type="ESB.MultipleWebServices.Orchestrations.TwoWayRouting, Biztalk.EsbGeneric.Orchestrations, Version=1.0.0.0, Culture=neutral, PublicKeyToken=140bc5dcbb9afcea" scope="Orchestration" stage="None"/>
Create an id using guidgen, the type is made up of the name and assembly of the orchestraiton (comma seperated) in the Admin Console and will vary depending on the application that you have deployed to. scope and stage are as shown above.
Initially I had an error on the send port Biztalk.HoopleEsbGeneric.Orchestrations_1.0.0.0_ESB.MultipleWebServices.Orchestrations.TwoWayRouting_RoutingPort_140bc5dcbb9afcea but changing the send and receive pipelines to PassThruTransmit and PassThruReceive respectively solved this.
I have an orchestration which should be kicked off when a text file comes in from a receive location,
as far as I can see things look as they should but the orchestration isn't starting and I get this in the admin console:
The published message could not be routed because no subscribers were found. This error occurs if the subscribing orchestration or send port has not been enlisted, or if some of the message properties necessary for subscription evaluation have not been promoted. Please use the BizTalk Administration console to troubleshoot this failure.
Does this mean I have to promote the message properties and if so do I do that in the orchestration?
With a text file, the inbound message will not by default have enough information in it to allow the BTS runtime to route your message. You need to pass the message into a flat file dissembler, which will convert your flat file message into an xml message.
The process of disassembly to xml will promote certain things into the context of the message, one of which will be the message type.
By default this is what your orchestration subscription will be based on if you have set things up in the most usual fashion.
Your problem is likely due to one of the following:
You don't have a flat file disassembler as a stage in your inbound pipeline, or it is set up incorrectly.
Your orchestration subscription is for a message type which does not match the type of message being dissembled.
To further troubleshoot, after starting your orchestration run a query for subscriptions from the BizTalk Admin Console. You should be able to see a row (or two) for your orchestration, with type = "Activation".
You should be able to see the criteria against which the BTS engine will have to successfully evaluate so that inbound messages reach your orchestration.
Also you can enable tracking on inbound messages and inspect the body of the message which comes in before and after disassembly.
Hope this helps
I have an "enevelope" schema and a body schema and I have setup the correct properties on the "envelope" to point to the body.
I also have a property schema for promoting a value in the body message so that i can route on it.
I set up a File drop receive location and two send ports. Each send port subscribing on a different value of the promoted property. The receive location uses XmlReceive and the send ports both use XmlTransmit.
When i drop one envelope message at the Rcv location, Bts picks it up, splits it, promotes the property and my send ports pick up the relevant messages and do their thing.
File drop was fine for testing, but the real scenario is slightly different.
I want clients to submit "envelope" schemas containing multiple document elements via Wcf
So i published the envelope schema as a Wcf endpoint using the publishing wizard. Let it create the new Receive location. Wired up a Wcf client to talk to this endpoint and submitted a message.
Without changing anything on the Send ports in BizTalk I expected the same result;
However I now get a routing failure.
If i remove the extra filter in the Send port that filters on the promoted property it works, no routing failure.
So ... it would appear that the promoting of my property is not happening on the Wcf receive location.
I have checked; the Wcf receive location is using XmlReceive.
What gives?
How do i fix this?
I would guess that the namespace of your incoming message has changed as a result of changing it to use WCF.
This can cause the property promotion to no longer match the incoming message.
You can view the property promotions in the tracked messages in the BizTalk server admin tools.