locked
HTTP Receive location failing to in BizTalk RRS feed

  • Question

  • Hi All,

    BizTalk application receives request from external vendor using HTTP Receive location which uses HTTPReceive.dll

    2 servers A and B in the production performing well, but it fails from yesterday. Could see request coming through the IIS in the IIS log, but it is not reaching to biztalk application.

    I have tried these steps in both A and B machines

    1. restart the biztalk app

    2. restart the application pool of the website that connects this app

    3. reset iis in the machines 

    How a request from IIS is routed to machines, I can't understand which machine handles the request, currently it reaches machine B, I could see previous IIS log where it processed successfully in machine A IIS log.

    I could see error 500 in machine B IIS log for each request that comes in but cannot make it to BizTalk app

    No error log in the event viewer of A and B BizTalk servers.

    Can anyone guide me how to resolve it?


    Regards

    Vivek

    Thursday, July 3, 2014 2:16 AM

Answers

  • Hi Vivek,

    If you get HTTP-500 error you will have eventlog entries, not just in IIS logs.

    "How a request from IIS is routed to machines, I can't understand which machine handles the request, currently it reaches machine B, I could see previous IIS log where it processed successfully in machine A IIS log." - IIS would route to BizTalk machines, only if you have separate servers as webserver(IIS) and BizTalk. If IIS is host in the same servers as BizTalk, then when the IIS receive the message, it would route to its standalone internal BizTalk server. The routing to different machines is due to the loadbalancer. Your statement is bit contradictory. I assume your IIS is local to the BizTalk servers. So when the client send the message to HTTPReceive.dll, the url is bound to loadbalacer, which based on its load balancer logic route the message to anyone of the BizTalk server's IIS (machine A and machine B) hence you see two different IIS logs in machine A and machine B.

    Many Load-balancers, I have seen work with a unique logic where they send the requests primary to one server always and only if that primary server is busy (or not available) then it would send it to other server. May be load-balancer have been sending its request to mahicne-A until recently and may be due to some reasons its sending the request to machine-B now. The reason machine-B may not be working now, could be because it was never configured properly before and when machine-B start to receive the message, it gives error(as load-balancer request are always handled by machine-A before). To prove this, stop IIS in machine-B and see machine-A receive the message.

    For this HTTP-500 error, check the HTTPReceive.dll is configured correctly. Check the following articles for configuration:

    Configuring BTSHTTPReceive.dll to work on IIS 7

    http://www.biztalkbill.com/Home/tabid/40/EntryId/66/Configuring-BTSHTTPReceive-dll-to-work-on-IIS-7.aspx

    http://social.msdn.microsoft.com/Forums/en-US/20ea5954-4ca8-40ca-b043-2e6c3d3ae105/btshttpreceivedll-remote-server-returned-an-error-500

     


    If this answers your question please mark it accordingly. If this post is helpful, please vote as helpful by clicking the upward arrow mark next to my reply.

    • Marked as answer by Angie Xu Wednesday, July 9, 2014 1:43 AM
    Thursday, July 3, 2014 9:39 AM

All replies

  • some thing might have got changed in Machine B, i assume you are using 64bit dll.

    first thing you need to check is the apppool needs to be set to use .net 4.0, because when you use 2.0, you will get same 500 error. so just check it. Recently i faced this issue and posted the helpful links for myself here


    Please mark the post as answer if this answers your question. If this post is helpful, please vote as helpful by clicking the upward arrow mark next to my reply.

    Thursday, July 3, 2014 4:22 AM
  • Hi Vivek,

    If you get HTTP-500 error you will have eventlog entries, not just in IIS logs.

    "How a request from IIS is routed to machines, I can't understand which machine handles the request, currently it reaches machine B, I could see previous IIS log where it processed successfully in machine A IIS log." - IIS would route to BizTalk machines, only if you have separate servers as webserver(IIS) and BizTalk. If IIS is host in the same servers as BizTalk, then when the IIS receive the message, it would route to its standalone internal BizTalk server. The routing to different machines is due to the loadbalancer. Your statement is bit contradictory. I assume your IIS is local to the BizTalk servers. So when the client send the message to HTTPReceive.dll, the url is bound to loadbalacer, which based on its load balancer logic route the message to anyone of the BizTalk server's IIS (machine A and machine B) hence you see two different IIS logs in machine A and machine B.

    Many Load-balancers, I have seen work with a unique logic where they send the requests primary to one server always and only if that primary server is busy (or not available) then it would send it to other server. May be load-balancer have been sending its request to mahicne-A until recently and may be due to some reasons its sending the request to machine-B now. The reason machine-B may not be working now, could be because it was never configured properly before and when machine-B start to receive the message, it gives error(as load-balancer request are always handled by machine-A before). To prove this, stop IIS in machine-B and see machine-A receive the message.

    For this HTTP-500 error, check the HTTPReceive.dll is configured correctly. Check the following articles for configuration:

    Configuring BTSHTTPReceive.dll to work on IIS 7

    http://www.biztalkbill.com/Home/tabid/40/EntryId/66/Configuring-BTSHTTPReceive-dll-to-work-on-IIS-7.aspx

    http://social.msdn.microsoft.com/Forums/en-US/20ea5954-4ca8-40ca-b043-2e6c3d3ae105/btshttpreceivedll-remote-server-returned-an-error-500

     


    If this answers your question please mark it accordingly. If this post is helpful, please vote as helpful by clicking the upward arrow mark next to my reply.

    • Marked as answer by Angie Xu Wednesday, July 9, 2014 1:43 AM
    Thursday, July 3, 2014 9:39 AM
  • Hi Ashwin,

    Thanks for your reply.

    I have checked each and every properties that needed to be configured for HTTPReceive.

    All are identical between A and B, but B fails.

    We rebooted B so that A node will become primary node. Now it works with A.

    But we don't know when B will become primary for whatever reason and disturb the production

    Regards

    Vivek

    Friday, July 18, 2014 11:21 AM
  • Have you seen eventlog entry with 500?

    Have you got InsolatedHost host created in Server-B, believe it I have seen some missing this, but still looking into other configurations.

    If every config is similar, then check the access permissions on app pool.

    Also Make sure the identity used in the application pool for the BtsHttpReceive virtual directory has access to the BiztalkMsgBoxDb. Check if the account is part of the BizTalk Isolated Host Users Group (or equivalent).

    Also make sure the above account has at least Read access to the <WINDIR>\temp directory (for example - C:\WINDOWS\Temp). This is especially important on a multi-server environment because the rights are not granted by default.




    If this answers your question please mark it accordingly. If this post is helpful, please vote as helpful by clicking the upward arrow mark next to my reply.

    Friday, July 18, 2014 12:49 PM