Forum Replies Created
-
AuthorPosts
-
Hi Experts:-
While making a call to Siebel Webservice from a Biztalk Orchestration, we are running out of Threads using the .NET ThreadPool. It looks like the orchestration thread that makes a call to the webservice is also in the threadpool and as we are instantiating more orchestration threads they occupy the pool and then keep waiting for a thread to become available. This generates the deadlock situation. We tried changing the high/low watermarks to a low number and that solves this problem but makes the overall performance really low. I am trying to search a solution and hitting things like setting some registry settings under HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services
for Min/Max Worker Threads.Somebody having first hand experience with this/similar problem….mind giving an advice? Is there a way to restrict number of threads an orchestration can instantiate at a time?
Thanks!
I didn’t see this anywhere in the forum so I’ll ask.
Are there any good books about 2006 and 2004 especially explaining the differences and in depth coverage of the technical details? I already use biztalk and know the basic concept behind it but I’d like to understand fully how everything works.
Any suggestsions would be great.
Thanks
August 23, 2006 at 8:21 PM in reply to: BizTalk Transport not an option in Visual Studio .NET ?!? #15428One of my ports need to be accessing a BizTalk queue.
When I add a port in my orchestration and selec the dropdown for Transport. I only have the following options:
FILE
HTTP
SOAP
MSMQTDo you know what I need to do to have MQSeries as an option?
I am able to dummy it up w/ MSMQT, deploy the solution then change the ports from BizTalk Admin console but then it bombs after receiving the message w/
\”The Messaging engine failed to process a message submitted by adapter:MQSeries Source URL:MQS://cbtnt283/CBTNT283/QL.CBTNT.CNR.MACROCELL. Details: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. \”
BizTalk is picking up the message because I find the complete body of the message via HAT.
Any advice?!?!
[quote:df89e2b952=\”It’sMe \”]Thanks for your answer! HTTPS seems to be what everyone is suggesting. But is HTTPS available by default?[/quote:df89e2b952]
Yes. On the client side, BizTalk has no problem connecting to HTTPS servers.
On the server side, this is supported by IIS which is where the receive side HTTP adapter runs, so it’s no problem. Again, if you’re hosting the server side, then you’ll want to get a server side certificate for it.
Thanks for your answer! HTTPS seems to be what everyone is suggesting. But is HTTPS available by default?
The setup is as follows.
SQL Adapter is pulling data out of a work-in-progress database.
Data is manipulated and formated as needed to xml
Data is sent to Web Service that stores information in another production database as final results.August 23, 2006 at 6:13 PM in reply to: Using exec to call dynamically determined orchestration? #15394[quote:dab3feaa3e=\”Stephen W. Thomas\”]John Flanders said it’s possible to dynamically start or call an Orchestration. I have not tried to do it, but you might want to check out http://www.masteringbiztalk.com.
It should be possible using a method similar to how you dynamically call a map.
Hope this helps.[/quote:dab3feaa3e]
I didn’t find any articles on his site regarding this, but Google pointed me back to a comment he made on your blog. His comment states:
([url]http://geekswithblogs.net/sthomas/archive/2005/10/21/57671.aspx#58174[/url])
# re: BizTalk vNext (Biztalk 2008?) Wish List
10/26/2005 11:04 AM by Jon Flanders
call NS.BizTalk_Orchestration2 (Variable_1);But you have to know the type at compile time. Someone futher down in the comments mentions this and hints that you might be able to use a Type instance in the call to exec; I’ll have to investigate that as I never really considered that option…
Thanks again.
[quote:228df42617=\”Dave\”]The reason I would like other suggestions.. is I have found performance to be sub-par. I think its the web service being called 250K times.. vs the pipeline however.[/quote:228df42617]
Here is a suggestion, though it might not suit your needs.
It sounds like your Web service is returning a single field from a SQL table and that field contains, essentially, a flat-file. If you want each record to go into the message box instead of being held in memory – i.e. external port/pipeline vs. called pipeline – what you might want to do is this:
1. Have an orchestration that queries the Web service or SQL database and writes the contents of the field to a send port bound to the FILE adapter.
2. Create a receive port that picks up the file and splits it using the flat-file disassembler. Each record will now be put into the message box.
3. Create an orchestration that receives these types of record messages and does something with them. If you need a convoy, you can correlate on the BTS.InterchangeId, as all the records from that \”file\” should have the same BTS.InterchangeId.
While you are going in-and-out of BizTalk, you are at least taking advantage of the BizTalk messaging engine and i.e. SQL, clustering, multiple hosts etc. Needless to say, 250,000 records is a LOT of records and invoking a pipeline from an orchestration might not be the best solution.
Another alternative would be to use one-way ports. The Web service receives a one-way request and calls back to BizTalk using another one-way port. You can use WS-Addressing’s ReplyTo header or a custom SOAP header so that the Web service knows where to return the response. You can then create a receive port that uses the flat-file parser to split the \”file\”. Your orchestration can then use correlation, convoys, direct-bound ports, or whatever to receive these records and parse them.
[b:228df42617]Edit:[/b:228df42617]
I think I misunderstood your response/initial post. Are you invoking a Web service to get the single SQL field containing the flat-file or are you using the SQL Adapter?
The reason I would like other suggestions.. is I have found performance to be sub-par. I think its the web service being called 250K times.. vs the pipeline however.
I appreciate all your comments.
I am doing it this way because of the data I am trying to process. I could not find a better way to do this, so my solution was the send/receive pipeline calls.
I get data from a single SQL field. Its comma delimited with nested fields and rows inside those comma fields. I could not figure out how to use the SQL Adapter and map a parse of the data into XML.
So I read the data from SQL. Map it and send it to a Flat File pipeline that add CR/LF to the structure. I then read in the message on a receive pipeline that parses the Flat File structure into all the XML nodes.
We are talking large amounts of records. It is about 200-250,000 records per file. Although.. the SQL call can return any subset of data as a count.
I was able to get around the issue by sending a message out of the atomic scope to another orchestration that then calls the web service. I used direct bind ports for that.
If you have suggestions on how to optimize this I would love to hear ideas. But as is, I could not find a better way to map SQL field (whcih is essentially a comma delimeted text file record) to XML without sending it on a sendpipeline to make it appear as FF, and then back in to parse to xml.
Thanks…
August 23, 2006 at 4:52 PM in reply to: Connecting BizTalk to MySQL with BTS2K6 Dynamic ODBC Adapter #15425Hi,
Todd Van Nurden ([url=http://www.gotdotnet.com/workspaces/workspace.aspx?id=4669f9cf-1eb9-4891-ba35-76ea42e45de4]gotdotnet[/url]) wrote that the \”[i:b7f910ad6b]ODBC Adapter for BizTalk Server 2004[/i:b7f910ad6b]\” supports a variety of databases like Oracle, DB2, SQL, SQLLite or [u:b7f910ad6b][b:b7f910ad6b]MySQL[/b:b7f910ad6b][/u:b7f910ad6b].
Unfortunately, I’m using BTS2K6 and even if his new custom adapter, \”[i:b7f910ad6b]BTS2K6 Dynamic ODBC Adapter[/i:b7f910ad6b]\” ([url=http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=2F88D1C8-BD76-4A1D-B55B-C5FF80B7D3C4]gotdotnet[/url]) works properly for an Oracle DB, I can’t use it for connecting BizTalk to a [u:b7f910ad6b][b:b7f910ad6b]MySQL[/b:b7f910ad6b][/u:b7f910ad6b] database.
So firstly, do you think it is possible to use this custom adapter to [b:b7f910ad6b][u:b7f910ad6b][color=darkred:b7f910ad6b]connect BizTalk and MySQL[/color:b7f910ad6b][/u:b7f910ad6b][/b:b7f910ad6b] ?
If you think it doesn’t, what other (free) possibilities do you think I have ?
I would be grateful if someone know (a part) of the answer…
[size=9:b7f910ad6b](Obviously, I’ve already asked the question to Todd Van Nurden himself … but the answer isn’t yet here).[/size:b7f910ad6b]Thanks !
hi sam…
you can use a Scope Shape to add a catch exception block. And, inside the catch block you can create the new message error and send it using the SMTP adapter.
for more information, see examples here:
http://weblogs.asp.net/jan/archive/2004/03/22/93981.aspx
http://dallas.sark.com/SarkBlog/mholdorf/archive/2004/10/22/442.aspx
http://www.traceofthought.net/PermaLink,guid,abdd6ca2-e964-437d-8bee-0188ec5b5afa.aspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/BTS_2004WP/html/ed17b4fc-ddc1-4a41-a134-7d11b2ea3a87.aspWell, fact retriever isn’t required. All you do is use any .NET component, make sure you’re working with public classes and methods, and then reference that assembly as a fact in the composer. Then simply call your method or set your properties. When you call that rule, you are passing in an instance of that class, and you’ll get back a potentially modified instance. I often end up with a library of random helper methods (convert string to date, etc) that are reused. The Fact Retriever comes into play when you want to cache data access (for instance, a database query) instead of incurring the database hit each time.
If you are indeed talking about copying source, just change the project properties on the original machine to use \”.\” as the BizTalk database, thus resolving to the local SQL instance on any server it’s compiled and deployed on.
Lots of ways. You can wrap a particular operation (say, calling a .NET component) in a \”scope\” shape marked as a long running transaction. Then you can create an \”exception\” block on that transaction that catches 1-to-n different exception types. For instance, you can catch \”System.Exception\” and then in that exception block, build a message detailing the error and send it out via an SMTP adapter. You can also mark the entire orchestration as long running, and then if anything fails, anywhere, it’ll trigger the compensating orchestration.
-
AuthorPosts