I have requirement where I need to send Flat file data to multiple customers.
One way is to create Send port for each of the customer and put a filter on the port to send the data specific to the Customer ID.
Now problem that I see is that customer will increase in coming days for sure so creating a new port for each customer is not a big deal but still I looking for some dynamic approach.
Can this be done with some kind of dynamic configuration for a single port?
You could use a Dynamic Send Port. This will give you the possibility to either use information in the message to configure the destination of the port run time. Another way is to have a database where you use some sort of customer id in the message to look up the destination and use that to configure the send port run time.
Related
I've got a weird issue which totally confused me. I have an orchestration that receives a file through Receive port and puts it to Send port with delivery notification. After that orchestration performs some other actions but my issue is with the part mentioned above. It works: I put a file to Receive location and it goes to appropriate destination folder.
But, if I assign to the Send port a filter that uses fields promoted in message and filter's expression is False it still works - I receive file in destination folder (however filter is False and Send port should not process this file). And once filter becomes True I receive...THREE equal files in destination folder!
Are there any logs that I can go through to try to figure out where these two extra files come from?
Even when you add a filter to a send port, if the Orchestration is bound to the send port, it will still send through that send port, regardless what other filters you put on it.
In the Admin Console you do a query for Subscriptions and find the send port, you will notice that it will have an OR condition with http://schemas.microsoft.com/BizTalk/2003/system-properties.SPTransportID == {GUID} and that is the filter that is used when a an Orchestration sends to a bound send port.
So check what the filter looks like for your send port. Also check to see if you have a send port group set up that includes that send port, as that would also cause a message to be sent to that send port if the filter on that matches.
What is probably happening is that the Orchestration is sending one, and the filter is matching the message received from the Receive Location. You will have to do some more digging to see why the third message.
My job is to write a distributed client/server application with some concurrent tasks. So i decided to use akka.net for the concurrency issues. To implement the ipc between server and client akka remote is used. For some reasons there may run more than one client of the same type on a workstation. So i configured these clients for dynamic assignment of a tcp port. This worked fine for sending messages to the server.
My problem is to push some information to the clients. To accomplish this task an actor on the client exist. Now the server creates a reference for this actor. Therefor it needs the port the client is listening on . My idea is to send the tcp port the client uses to the server in some sort of connection procedure using a actor on the server.
After searching for some hours I didn't find any hint where to find the dynamically assigned tcp port. So how would the client get the assigned tcp port?
Ok, I could use akka.cluster. But using akka.cluster is breaking a fly on the wheel, I think. And if it solves my issue reamins to be seen.
Two suggestions, assuming that it is your client that makes the first contact with the server.
I'd have the server keep track of which clients are connected. I'd probably have a heartbeat message that gets sent once every few seconds from each client system. This way you can store an IActorRef for each alive client and send messages back without the need for finding the port. IActorRefs are preferable wherever possible for location transparency.
If you actually need to explicitly find the port, you may be able to extract it from the Path property of the IActorRef of one of the actors on the client system.
Thanks to patricks suggestions my issue is solved.
The solution is to extract the needed information from the senders path available while executing the hello message. With this information the server is able to maintain a list of all connected clients and theire network address.
Thanks a lot # patrick.
Regards Gregor
In BizTalk server we can configure many receive locations for one receive port . In the same way if I want to send the same message to many destinations I have to create a send group containing the collection of send ports which will send the message to my desired locations . This is fine I have understood the concept of send group . But why one send port is not supporting more than one send location ??
But why one send port is not supporting more than one send location
I guess the main reason for this is "Because it is what it is". The difference between send port groups with multiple ports, and recieve ports with mutliple locations is mainly semantics, rather than any technical difference.
However, in the interests of argument, I could argue that a send port, which is by it's nature a subscriber in BizTalk, should only do a single thing. In this case that thing is to send to one transport channel (and one backup channel). If you introduced multiple "send locations" then the send port would be responsible for more than one thing.
Furthermore, the introduction of send locations would introduce complexity:
what send locations would be invoked to send the message? Would it be the same each time?
how to handle a mixture of synchronous and asynchronous transports on a single send port?
etc...
I have developed serve-client model based on UDP. Client are connected to server on random basis. I mean number of clients alive at a time is not fixed.
Any new client can communicate any time. It means, there could be 1 live client or 100 clients or any number of clients.
Now in such model, I need to add HTTP requests. Browser could send request to server and then server will forward that to any of client based on some identification.
Is there any method or readymade server(like nginix or lighttpd), which I can use for this requirement.
My big worry is that, destination client are not fixed, they keep changing. Most of server (nginix or lighttd) have static entries for destination address.
I visualize your scenario as multiple sensors that connect to the servers when they have something to say, and then they send a request and wait for the answer.
I visualize you also want to somehow administer such modules so that you want to access to them via HTTP.
You could leave the new configuration items on the regular server so that upon any update connection the response would include (in a piggy-backed fashion) the changes to the node.
Or the server could mark somehow your interest in accessing a certain node, and then, when this connects, the server could notify the interested client. The sensor should pay attention to clients wanting to connect to them during a window time.
Certainly, more information would help us help you.
another ordered delivery problem.
We have an orchestration which is bound to a send port which has ordered delivery true. Another send port also picks up these messages through filtering, this port also has ordered delivery.
Now for some reason when there are multiple ports using the message and one of these is directly port binded only one of the ports is being used. I mean that not both ports give an output.
If i unenlist one of the ports it's always outputted, this works in both ways.
We used to have this with 2 ports which both used filters instead, this worked but we had to change one to a direct port, the problem occured since then. Also the choice of ports for BizTalk is pretty random, because on our server it for example chooses port A and when I recreate the same problem on my local machine it for example choses port B.
It's kind of a weird problem and we have no idea what could be the cause.
David Hall: I recreated this on my BizTalk 2010 box and never faced the problem you are mentioning! You have to set ALLOW MULTIPLE RESPONSES to True. It is under the HOSTS tab in BizTalk settings dashboard.
So, I've got 4 send ports. Each has Ordered Delivery turned ON. All send ports are on same subscription, i.e. BTS.ReceivePortName. I have an MLLP receive location for receiving the message into the Biztalk box.
Test Case: Does BizTalk maintain order ?
I sent 5 diff messages in this order 1,1,2,2,3,3,4,4,5,5. All 4 send ports sent the message out in the same order 1,1,2,2,3,3,4,4,5,5.
Result; YES it does.
Forgot to mention. Everything is running under one default host of BizTalkServerApplication.
Hi this a bug in BizTalk Messaging engine worker thread, for it doesnot execute all ordered delivery Send Ports at the same time running under the same host. At max, it runs only two ordered delivery Send port, but if you have four to five ordered delivery Send ports, then only at max two send port execute at one time. To make all the ordered delivery send port works at a time, you need to put them under different host
Did you tried to add the filter to a Port Group instead, and have all the other properties in the specific ports?