Forum Replies Created
-
AuthorPosts
-
not possible.
This solution should work, i will give a try
Hi,
Thanks for replying.
I tried your solution to use XPath.
In the "Message Assignment Expression Editor" is wrote:
Testver7SendMsgInc = xpath(Testver7RecMsgInc,"/*[local-name()='ContainerPro1' and namespace-uri()='']/*[local-name()='ACTSEQ' and namespace-uri()='']");
ContainerPro1 is my incoming schema ie XMLInputFile1 Root name.
ACTSEQ is a child field element node, whose value i need to show as an output file name.
I am using custom SendPipeline with Flat File assembler. and %SourceFileName%.txt in the sendport file name configuration, but I get the following error:
There was a failure executing the send pipeline: "Testver7Schemas.SendPipeline1, Testver7Schemas, Version=1.0.0.0, Culture=neutral, PublicKeyToken=95070596c425719e" Source: "Flat file assembler" Send Port: "Testver7SendPort" URI: "F:\Biztalk\BizTalk\ProjectExperiment\Testver7OwnSolution\Target\%SourceFileName%.txt" Reason: This Assembler cannot retrieve a document specification using this type: "ACTSEQ".
This error is not due to multiple assemblies, as it run perfectly if i remove Message Assignment.
I haven't specified Target Namespace, if i specify it, i again get some other errors with receive pipeline. I tried to use different pipelines too, but of no use.
But when i use PassthruPipeline i get the output but file name as %SourceFileName%.txt, and file output text is also wrong, which i don't want.
Please could you guide me where is the error, and what is the solution in details , as i am new to Biztalk so finding it difficult to get the result.
Is there any solution that i can get the file name same as my input file name. Example i have an input file name say: "input_234.xml" , so can i get the same file name as my output file name like "input_234.txt" . if i can do this it would be fine.
Thanks once again. Hope to get a positive and quick response from your side.
Gaurav Garg
Greg,
Thanks for explaining this, but I haven't got the complete answers:
1. As you explained in the File and FTP adapter scenario, they will both be looking for the same file and who'll ever get it first will process it, thats how load is balanced b/w those host instances. But why cant we do the same for MSMQ, have a queue server rather then a Remove Server, the queue is placed there, and have both queue host instances listening to there and whoever get it first can process the message?
2. If that is not possible, is there any other way we can load balance MSMQ messages or you are ruling out any possiblity of that?, Also please kindly tell me if load balancing is possible with WebSphere MQ?
3. Lastly From your explanation I infer that the statement 'BizTalk itself load balances b/w host instances' is in correct, because it is dependent on the adapters, whether they support load balancing or not?
Hope to listen from you soon,
Regards,
Sajid.
Do you mean calling a SQL stored procedure passing an Xml document as a parameter?
If so, then you can do this with the SQL Adapter
Create your stored procedure:
CREATE PROCEDURE [dbo].[bts_PassXmlDocument] @XmlDoc ntextUse the Add adapter metadata to create the schema for the stored procedure.
Promote the XmlDoc field from this schema as a Distinguished Field.
Generate a schema for the Xml document you wish to pass.
In an orchestration create a message for the SQL Stored Procedure schema (msgSQLMessage) and a message based on the Xml Document schema(msgXmlDoc) and declare an orchestration variable of type System.Xml.XmlDocument (varXmlDoc)
In a message assignment shape:
varXmlDoc = msgXmlDoc;
msgSQLMessage.bts_PassXmlDocument.XmlDoc = varXmlDoc.OuterXml;Send the msgSQLMessage to SQL Adapter send port.
December 19, 2006 at 12:05 PM in reply to: bts_UpdateMsgbox_BizTalkServerApplication deadlocks due to PersistenceItemException #17012I would look first to the state of the sql server running the bts management dbs. Enough room, db and indexes in good shape? etc. Then I would look to the throttling parameters. I believe your sql engine is under powered, or overly constrained in some way.
try simplifying the system to find the bottle neck. Is the ws that handles the sql inserts handling its deadlocks appropriately? can you convert to use bts sql adapter to test?
Ok, not a really easy way of doing this but it is possible? I have been told absolutly this must be done without using virtual machines. It does not matter how difficult it is, does not matter how complex the changes to compoinent names or changes to orchestrations, I MUST find a way to support four environments on a single machine without using virtual machines. Any idea?
Perhaps even more details.
We have a WebSphere Application Server running our primary application. This WAS is configured to talk to a queue manager running on UNIX. This queue manager (IBM WebSphere MQ) can handle request/reply where the application send request, saves MsgId and reads the proper response via the Correl Id. If this was all there was too it, I would be fine. But there are two other interfaces where the application on the WAS cannot know if the response is thiers. One process sends request but since there is not a user waiting at a web screen, the sending process ignores any responses, it leave another application to sit there read ANY message that shows and processes it. Since our INT and QT WAS applications are currently being fed by a single BizTalk instance, any response of this type can be read by either. So if the Integration people initiate a request, the QA environment may read the response and process it even though they did not generate it.
If I had two BizTalk instances, running on two computers or in two virtual machines, each could load the exact same code, talk to two different queue managers. So INT and QT are isolated and when one sends a request, it will go o different BizTalk servers which are configured to talk to their queue manager only. We would have a INT WAS, INT queue manager, and INT BizTalk server. We would have a QT WAS, QT queue manager, and a QT BizTalk server.
But we have only one BizTalk server and can only run one BizTalk server, no tricks like virtual machines due to license issues. So if I could find a say to deploy our code multiple times on the same server, I could configure each instance to talk to a different queue manager as if they were on different servers. It would be like loading Application A and Application B which is done all the time but in this case, A and B have the same orchestrations, same schema, same assemblies, etc.
Initally I tried the following.
Use BizTalkApplicationServer as the default Host Instance. I did a regular deplay and it worked. I then created a second Host Instance, set this up as the default and tried a deploy with no changes. Unfortunatly, the send ports are not associated with a particular Host Instance, receive locations are tied to a Host Instance but send ports are not. Also the various assembles are not associated with a specific Host Instance. So when the second deploy is attempted, I get error messages about assemblies already deployed and the deploy fails.
Now I am trying to alter the assembly names and just the assembly names. I hope this will allow the assembles, containing the same stuff but with different names to coexist in the mysterious common area that is not part of the Host Instance. I have run into a few errors that I am trying to resolve. Unfortunatly I believe this will also prove to be a dead end.
I suspect I will have to treat every single step of the configuration path as a different application just as if I were to load a BizTalk application from Company A and a different BizTalk application from Company B. I am afraid this will require renaming most if not all components, make changes to Orchestrations that reference these componetns, and who knows what other changes. So after the Integration testers complete thier tests, I would have to rename everything, make extensive changes to various orchestrations and custom pipelines and then recompile what is basically an entirely different applicaiton. Kinda defeats the purpose of Integration testing if the QT testers get different code. Not to mention Customer Testing and Production each getting a "different" application.
Figure this is as confusing as my other attempts, hope it kept you entertained at least.
I use Microsoft VirtualPC to maintain separate development environments but in each case, my BizTalk processes do not communicate with any other systems. How do I address the VirtualPC instance is I wanted to have an external development system connect. If you understand MQSeries, I have a running queue manager in my VirtualPC but do not know the TCP/IP address that the external system needs to create a channel.
I try ipconfig and it gives me an ip address but this does not seem to allow external systems to connect. So even if we address the license issues with virtual machines, not sure how to deal with this problem yet. From what I read on various forums, it is doable but everyone seems to know how and no one seems to document it anywhere. Thank you for the idea though.
Hmmm, the automatic log in feature does not always seem to work. The post from Anonymous below is from me.
Depends on the adapter type.
For HTTP and SOAP the adapter listens for messages. The sending machine needs to decide which server to send it to and it has no idea which server is active. NLB addresses this problem, it picks one of the servers to receive each message. If one server goes down, the other/s will take over.
The FILE and FTP adapters pull data from a remove server. If you have two servers with the same host instance running an FTP adapter they will both connect to the remove server and attempt to download the same file – you need to fail over this host instance using a cluster
Although MSMQ is a listening rather than a polling adapter, it does not load balance – you can only have one queue so you cannot alternate messages between two servers – you need to fail over host instances using a cluster.
You can have a look at this article of mine.
Are you getting any errors in the event log? If not, it must be some problem with your data colliding with each other or locking in some manner.
Maybe you need to always process your 5 files in order? This can be set on the Send Port (assuming they all use the same Send Port).
All you should have to do is change the SQL Connection strings inside your Send and Receive Ports. As long as your table names and columns are the same your updategrams should all still work.
This can easily be done inside your Binding files when you move to another environment. Just make sure you note that the passwords are always stared out when you export the binding file so you need to add them in.
December 18, 2006 at 7:48 PM in reply to: bts_UpdateMsgbox_BizTalkServerApplication deadlocks due to PersistenceItemException #16998Not sure on this one. Have you tried to put the code into two separate Application in separate hosts?
It sounds like something MS Support might be able to help with.
The errors returned from the SQL Adapter are not very good.
I think they are returned as SOAP Fault. You might want to try casting them (see my BizTalk 2004 Sample here http://www.biztalkgurus.com/Samples/Delivery-Notification-NAck-Orchestration.html).
Not really sure if this gives you a better error or not for SQL though.
Not sure. I think you’d need to export the data as a flat file or XML. Not sure if anyone has an access database adapter.
Now if you just need to query data out of it, you could use .net code to query data out.
-
AuthorPosts