Posted on Leave a comment

Create a scheduled task fetch files from SFTP in Biztalk

Highlights – Biztalk 2013, Biztalk Scheduled Task Adapter, Visual Studio, IIS, C# WCF Service with WinSCP Nuget package

Recently I had a request for a Biztalk solution that gets files from a SFTP folder and process in a Biztalk receive location. It was easy just create a SFTP receive location. However here is a twist. The files can only be picked up once a week. Problem was that the receive location picked up files as soon as it landed there.

The solution was obvious a scheduled task was required. My first thought was to create a C# script and run it on a task scheduler that would pick the files from the SFTP and place it on the receive folder location for Biztalk. But then if that possiblity exists in Biztalk why not use it. The latest version of Biztalk as of now is 2020 which has that functionality. However I was using 2013.

There is a way to do this in Biztalk 2013, by using the scheduled task adapter in Biztalk. Then pass that call to the send port that calls a WCF service that uses an SFTP client like WinSCP. The source code are provided in the bottom of this tutorial.

Here I describe the steps to complete that task.

ReceivePort –> ReceiveLocation runs on schedule–> SendPort –> WCFService –> WinSCP–>Transfer files to another receive location

I created a schema in biztalk for the purpose. This is to associate the XML in the receive location to the Send Port

Create a receive location and a scheduled transport type. From the drop-down in the type select the schedule adapter. If you have not the schedule transport type, you would need to download and add Biztalk Scheduled Task Adapter and install it. I have version 5.0.

In the properties section, go to Task tab and find the task

In the task section choose the TaskComponents.dll. We want to create a

From there use the XML string provider, because we want to send an XML to the Send Port in the later scenario.

In the XML string toolbox we create a simple xml string like the following, remember the namespace. We require this in the send port and WCF applciation.

<?xml version="1.0"?>
<ns0:Call xmlns:ns0="http://NirjalBiztalkApp.CallSFTP"/>

To run the task on a schedule, on the schedule tab. Configure how often you want the scheduler to run. This for example will run every 15 seconds.

Next we go ahead and create the C# WCF service in Visual Studio. Later we are going to create a send port that calls this WCF service.

Next have download WinSCP nuget package to get files from SFTP.

After installation and setting up publish the WCF service or run it and browse to the .svc address.

Now we copy the soapAction from the wsdl file. This will be later used in the Send Port.

Now create a send port that associates to the receive port created earlier. In the filter section, for example I used the ReceivePortName. Other properties can also be used.

In the send port find the WCF-Custom binding for type, binding I created a HTTP binding. Provide the address to the WCF service in the Address for the SOAP action. Provide the SOAP action copied earlier from the wsdl.

Start the Biztalk application and see what happens. If everything goes as planned the application will run every 15 seconds and call the WCF service. Thats all to it. If you like the source files to the project I have provided them in GitHub Feel free to use it and let me know if you have any comments.

Posted on Leave a comment

Create your own chatbot with google assistant and web scraping

When I travelled to US in December 2018, I stayed at my sister’s apartment. It was a great time. One of the things that they showed me was an Alexa speaker, a voice command assistant developed by Amazon. I found it quite interesting when they showed how they could ask questions and it would answer back like a real human. In the market I saw a rise in popularity of home assistants such as Alexa and Google Home. I found it very interesting so I played around with it asking it different questions and sending commands. It was not that smart honestly but then I started exploring more I got into many ways such an assistant could integrate with different third party services using voice commands. It struck me that this could potentially open new opportunities. What if all the websites in the world had some form of support for voice assistants in their website.

To explore on this idea, I am currently working on a proof of concept to create an a bot that integrates with google assistant. I could send questions to the assistant to talk to my bot. The bot would then go find the answersfor me. Here is the challenge not all websites have support for api’s. Therefore I am going to use web scraping to get information from other websites.