SamplesV1/CrossAppDomainDotNetActivitySample/MyDotNetActivity.cs (44 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All Rights Reserved.
using Microsoft.Azure.Management.DataFactories.Models;
using Microsoft.Azure.Management.DataFactories.Runtime;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using System;
using System.Collections.Generic;
using System.Linq;
namespace CrossAppDomainDotNetActivitySample
{
// NOTE: This is a *toy* implementation of CrossAppDomainDotNetActivity. Proper error handling has been elided
// for brevity's sake. A production implementation should include proper error handling.
class MyDotNetActivity : CrossAppDomainDotNetActivity<MyDotNetActivityContext>
{
protected override MyDotNetActivityContext PreExecute(IEnumerable<LinkedService> linkedServices,
IEnumerable<Dataset> datasets, Activity activity, IActivityLogger logger)
{
WriteGreeting(logger);
// Process ADF artifacts up front as these objects are not serializable across app domain boundaries.
Dataset dataset = datasets.First(ds => ds.Name == activity.Inputs.Single().Name);
var blobProperties = (AzureBlobDataset)dataset.Properties.TypeProperties;
LinkedService linkedService = linkedServices.First(ls => ls.Name == dataset.Properties.LinkedServiceName);
var storageProperties = (AzureStorageLinkedService)linkedService.Properties.TypeProperties;
return new MyDotNetActivityContext
{
ConnectionString = storageProperties.ConnectionString,
FolderPath = blobProperties.FolderPath,
FileName = blobProperties.FileName
};
}
public override IDictionary<string, string> Execute(MyDotNetActivityContext context, IActivityLogger logger)
{
WriteGreeting(logger);
// This demonstrates using a type (i.e., CloudBlob) available in Azure storage 6.2 but not 4.3.
CloudStorageAccount account = CloudStorageAccount.Parse(context.ConnectionString);
var blob = new CloudBlob(
new Uri(new Uri(account.BlobEndpoint, context.FolderPath), context.FileName), account.Credentials);
string message = string.Format("The blob's type is '{0}' and it does{1} exist.",
blob.BlobType, blob.Exists() ? "" : "n't");
logger.Write(message);
return new Dictionary<string, string>() { { "Message", message } };
}
static void WriteGreeting(IActivityLogger logger)
{
// This demonstrates in which app domain the caller is running.
logger.Write("Hello, world, from app domain '{0}'!", AppDomain.CurrentDomain.FriendlyName);
}
}
}