From a2b241824742e8b30f7ce792de8d3dec77e04a1b Mon Sep 17 00:00:00 2001 From: Hamid Safi Date: Thu, 7 Apr 2016 10:54:48 -0700 Subject: [PATCH] Add ApiHub support --- WebJobs.Script.sln | 21 +++++ sample/ApiHubTrigger-Batch/function.json | 17 ++++ sample/ApiHubTrigger-Batch/run.bat | 4 + sample/ApiHubTrigger-CSharp/function.json | 18 ++++ sample/ApiHubTrigger-CSharp/run.csx | 14 +++ sample/ApiHubTrigger/function.json | 17 ++++ sample/ApiHubTrigger/index.js | 6 ++ .../WebJobs.Script.Host.csproj | 17 ++-- src/WebJobs.Script.Host/packages.config | 12 +-- src/WebJobs.Script.WebHost/Web.config | 1 + .../WebJobs.Script.WebHost.csproj | 17 ++-- src/WebJobs.Script.WebHost/packages.config | 12 +-- src/WebJobs.Script/Binding/ApiHubBinding.cs | 88 +++++++++++++++++++ src/WebJobs.Script/Binding/FunctionBinding.cs | 6 ++ .../Config/JobHostConfigurationBuilder.cs | 5 ++ .../Description/ApiHubBindingMetadata.cs | 35 ++++++++ .../Description/BindingMetadata.cs | 3 +- src/WebJobs.Script/Description/BindingType.cs | 4 +- .../CSharpFunctionDescriptionProvider.cs | 3 + .../Description/FunctionDescriptorProvider.cs | 27 +++++- src/WebJobs.Script/GlobalSuppressions.cs | 1 + src/WebJobs.Script/Host/ScriptHost.cs | 4 + src/WebJobs.Script/WebJobs.Script.csproj | 19 ++-- src/WebJobs.Script/packages.config | 12 +-- .../CSharpEndToEndTests.cs | 6 ++ .../WebJobs.Script.Tests/EndToEndTestsBase.cs | 39 ++++++++ .../CSharp/ApiHubSender/function.json | 15 ++++ .../TestScripts/CSharp/ApiHubSender/run.csx | 10 +++ .../CSharp/ApiHubTrigger/function.json | 16 ++++ .../TestScripts/CSharp/ApiHubTrigger/run.csx | 14 +++ .../WebJobs.Script.Tests.csproj | 34 +++++-- test/WebJobs.Script.Tests/packages.config | 12 +-- 32 files changed, 464 insertions(+), 45 deletions(-) create mode 100644 sample/ApiHubTrigger-Batch/function.json create mode 100644 sample/ApiHubTrigger-Batch/run.bat create mode 100644 sample/ApiHubTrigger-CSharp/function.json create mode 100644 sample/ApiHubTrigger-CSharp/run.csx create mode 100644 sample/ApiHubTrigger/function.json create mode 100644 sample/ApiHubTrigger/index.js create mode 100644 src/WebJobs.Script/Binding/ApiHubBinding.cs create mode 100644 src/WebJobs.Script/Description/ApiHubBindingMetadata.cs create mode 100644 test/WebJobs.Script.Tests/TestScripts/CSharp/ApiHubSender/function.json create mode 100644 test/WebJobs.Script.Tests/TestScripts/CSharp/ApiHubSender/run.csx create mode 100644 test/WebJobs.Script.Tests/TestScripts/CSharp/ApiHubTrigger/function.json create mode 100644 test/WebJobs.Script.Tests/TestScripts/CSharp/ApiHubTrigger/run.csx diff --git a/WebJobs.Script.sln b/WebJobs.Script.sln index 594d6aa0fa..c83bcee284 100644 --- a/WebJobs.Script.sln +++ b/WebJobs.Script.sln @@ -214,6 +214,24 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HttpTrigger-Disabled", "Htt sample\HttpTrigger-Disabled\index.js = sample\HttpTrigger-Disabled\index.js EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ApiHubTrigger-CSharp", "ApiHubTrigger-CSharp", "{A308340E-16AC-47DA-9402-A279F681D5F3}" + ProjectSection(SolutionItems) = preProject + sample\ApiHubTrigger-CSharp\function.json = sample\ApiHubTrigger-CSharp\function.json + sample\ApiHubTrigger-CSharp\run.csx = sample\ApiHubTrigger-CSharp\run.csx + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ApiHubTrigger-Batch", "ApiHubTrigger-Batch", "{6F2A5DC3-EE0F-476F-A79B-31D4ED8C7DEB}" + ProjectSection(SolutionItems) = preProject + sample\ApiHubTrigger-Batch\function.json = sample\ApiHubTrigger-Batch\function.json + sample\ApiHubTrigger-Batch\run.bat = sample\ApiHubTrigger-Batch\run.bat + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ApiHubTrigger", "ApiHubTrigger", "{5FBF4581-318C-4320-81AA-6B2F02AF34EC}" + ProjectSection(SolutionItems) = preProject + sample\ApiHubTrigger\function.json = sample\ApiHubTrigger\function.json + sample\ApiHubTrigger\index.js = sample\ApiHubTrigger\index.js + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -281,5 +299,8 @@ Global {ACEE40C6-DA72-422E-99B6-2FA3824733CE} = {FF9C0818-30D3-437A-A62D-7A61CA44F459} {DC1805CF-39CE-40E3-9F3A-E7C7DAD52B7E} = {FF9C0818-30D3-437A-A62D-7A61CA44F459} {97B9DB7D-8014-46A0-9E51-6C02A99E4D38} = {FF9C0818-30D3-437A-A62D-7A61CA44F459} + {A308340E-16AC-47DA-9402-A279F681D5F3} = {FF9C0818-30D3-437A-A62D-7A61CA44F459} + {6F2A5DC3-EE0F-476F-A79B-31D4ED8C7DEB} = {FF9C0818-30D3-437A-A62D-7A61CA44F459} + {5FBF4581-318C-4320-81AA-6B2F02AF34EC} = {FF9C0818-30D3-437A-A62D-7A61CA44F459} EndGlobalSection EndGlobal diff --git a/sample/ApiHubTrigger-Batch/function.json b/sample/ApiHubTrigger-Batch/function.json new file mode 100644 index 0000000000..68203fb11d --- /dev/null +++ b/sample/ApiHubTrigger-Batch/function.json @@ -0,0 +1,17 @@ +{ + "bindings": [ + { + "type": "apiHubTrigger", + "connection": "AzureWebJobsDropBox", + "direction": "in", + "path": "testin/{name}" + }, + { + "type": "apiHub", + "name": "output", + "connection": "AzureWebJobsDropBox", + "direction": "out", + "path": "testOutBatch/{name}" + } + ] +} \ No newline at end of file diff --git a/sample/ApiHubTrigger-Batch/run.bat b/sample/ApiHubTrigger-Batch/run.bat new file mode 100644 index 0000000000..2e053e5879 --- /dev/null +++ b/sample/ApiHubTrigger-Batch/run.bat @@ -0,0 +1,4 @@ +echo OFF +SET /p input=<%input% +echo Windows Batch script processed file +echo %input% > %output% diff --git a/sample/ApiHubTrigger-CSharp/function.json b/sample/ApiHubTrigger-CSharp/function.json new file mode 100644 index 0000000000..c8f12568cd --- /dev/null +++ b/sample/ApiHubTrigger-CSharp/function.json @@ -0,0 +1,18 @@ +{ + "bindings": [ + { + "type": "apiHubTrigger", + "connection": "AzureWebJobsDropBox", + "direction": "in", + "path": "test/{name}", + "name": "input" + }, + { + "name": "output", + "type": "apiHub", + "connection": "AzureWebJobsDropBox", + "direction": "out", + "path": "testOut/{name}" + } + ] +} \ No newline at end of file diff --git a/sample/ApiHubTrigger-CSharp/run.csx b/sample/ApiHubTrigger-CSharp/run.csx new file mode 100644 index 0000000000..18d1b72575 --- /dev/null +++ b/sample/ApiHubTrigger-CSharp/run.csx @@ -0,0 +1,14 @@ +using System; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; +using System.Diagnostics; +using Microsoft.Azure.WebJobs.Host; + +public static void Run(string input, out string output, TraceWriter log) +{ + log.Verbose($"C# ApiHub trigger function processed a file..."); + + output = input; +} \ No newline at end of file diff --git a/sample/ApiHubTrigger/function.json b/sample/ApiHubTrigger/function.json new file mode 100644 index 0000000000..c05a6beb34 --- /dev/null +++ b/sample/ApiHubTrigger/function.json @@ -0,0 +1,17 @@ +{ + "bindings": [ + { + "type": "apiHubTrigger", + "connection": "AzureWebJobsDropBox", + "direction": "in", + "path": "testinnode/{name}" + }, + { + "type": "apiHub", + "name": "output", + "connection": "AzureWebJobsDropBox", + "direction": "out", + "path": "testoutnode/{name}" + } + ] +} \ No newline at end of file diff --git a/sample/ApiHubTrigger/index.js b/sample/ApiHubTrigger/index.js new file mode 100644 index 0000000000..ede142ba5f --- /dev/null +++ b/sample/ApiHubTrigger/index.js @@ -0,0 +1,6 @@ +module.exports = function (context, input) { + context.log('Node.js ApiHub trigger function processed ', input); + context.done(null, { + output: input + }); +} \ No newline at end of file diff --git a/src/WebJobs.Script.Host/WebJobs.Script.Host.csproj b/src/WebJobs.Script.Host/WebJobs.Script.Host.csproj index 681659f5e1..6f80ff10f2 100644 --- a/src/WebJobs.Script.Host/WebJobs.Script.Host.csproj +++ b/src/WebJobs.Script.Host/WebJobs.Script.Host.csproj @@ -71,6 +71,9 @@ ..\..\packages\Microsoft.Azure.DocumentDB.1.5.3\lib\net40\Microsoft.Azure.Documents.Client.dll True + + ..\..\packages\Microsoft.Azure.ApiHub.Sdk.0.3\tools\Microsoft.Azure.ApiHub.Sdk.dll + ..\..\packages\Microsoft.Azure.NotificationHubs.1.0.3\lib\net45-full\Microsoft.Azure.NotificationHubs.dll True @@ -80,23 +83,27 @@ True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.1.0.2-alpha-10266\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.1.0.2-alpha-10267\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll + True + + + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.ApiHub.1.0.0-alpha-10267\lib\net45\Microsoft.Azure.WebJobs.Extensions.ApiHub.dll True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.DocumentDB.1.0.0-alpha-10266\lib\net45\Microsoft.Azure.WebJobs.Extensions.DocumentDB.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.DocumentDB.1.0.0-alpha-10267\lib\net45\Microsoft.Azure.WebJobs.Extensions.DocumentDB.dll True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.EasyTables.1.0.0-alpha-10266\lib\net45\Microsoft.Azure.WebJobs.Extensions.EasyTables.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.EasyTables.1.0.0-alpha-10267\lib\net45\Microsoft.Azure.WebJobs.Extensions.EasyTables.dll True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.NotificationHubs.1.0.0-alpha-10266\lib\net45\Microsoft.Azure.WebJobs.Extensions.NotificationHubs.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.NotificationHubs.1.0.0-alpha-10267\lib\net45\Microsoft.Azure.WebJobs.Extensions.NotificationHubs.dll True - ..\..\packages\Microsoft.Azure.WebJobs.Extensions.SendGrid.1.0.2-alpha-10266\lib\net45\Microsoft.Azure.WebJobs.Extensions.SendGrid.dll + ..\..\packages\Microsoft.Azure.WebJobs.Extensions.SendGrid.1.0.2-alpha-10267\lib\net45\Microsoft.Azure.WebJobs.Extensions.SendGrid.dll True diff --git a/src/WebJobs.Script.Host/packages.config b/src/WebJobs.Script.Host/packages.config index 142599ec9e..6de814c540 100644 --- a/src/WebJobs.Script.Host/packages.config +++ b/src/WebJobs.Script.Host/packages.config @@ -6,17 +6,19 @@ + - - - - - + + + + + + diff --git a/src/WebJobs.Script.WebHost/Web.config b/src/WebJobs.Script.WebHost/Web.config index 015f72ed72..3a7a7c84cb 100644 --- a/src/WebJobs.Script.WebHost/Web.config +++ b/src/WebJobs.Script.WebHost/Web.config @@ -4,6 +4,7 @@ http://go.microsoft.com/fwlink/?LinkId=301879 --> +