2016-10-27 9 views
1

私は、Azure WebJobのSendGrid拡張機能を使用しようとしています。私は次のエラーで、残念ながら、WebJobアプリのクラッシュを例に従うことを試みたが、しました:WebJobが読み込まれていませんSendGridMailアセンブリ

Could not load file or assembly 'SendGridMail, Version=6.1.0.0, Culture=neutral, PublicKeyToken=2ae73662c35d80e4' or one of its dependencies. The system cannot find the file specified.

はかつてNewtonSoftのJSONを含む前に似たように実行した、私は次のように追加することで問題を解決しようとしましたapp.configに:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="SendGridMail" publicKeyToken="2ae73662c35d80e4" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" /> 
    </dependentAssembly> 
</assemblyBinding> 

残念ながら、それは役に立たなかった(同じエラーメッセージ)。

私は、WebJobs SendGrid拡張機能のnugetパッケージが古いバージョンのSendGrid(v6.1)をインストールしていることに気付きました。しかし、私はWebJob拡張機能の例に従うことをしようとしている、と彼らはステートメントを使用して、次のしている:

using SendGrid.Helpers.Mail; 

と、残念ながら、SendGrid.Helpers.Mail名前空間はSendGridのV6.1には存在しません。トムのフィードバックに基づいて詳細

追加

、私はSendGrid拡張nugetパッケージをアンインストールし、そしてproject.jsonを編集して「手動」に必要なライブラリをインストールしました。それは私にライブラリのそれぞれの最新の安定したバージョンを取得...しかし、アプリは起動時に同じエラーでクラッシュします。

public static void Main(string[] args) 
{ 
    var config = new JobHostConfiguration() 
    { 
     NameResolver = new QueueNameResolver(new AzureContext()), 
    }; 

    if(config.IsDevelopment) 
    { 
      config.UseDevelopmentSettings(); 
    } 

    config.Tracing.ConsoleLevel = TraceLevel.Info; 

    // this is the line where the exception gets thrown 
    config.UseSendGrid(); 

    JobHost host = new JobHost(config); 

    host.RunAndBlock(); 
} 

私は次のようにFunctions.csでメソッドのシグネチャを変更し、SendGrid例を以下しています:

public static void ProcessPhoneFileMessage(
     [QueueTrigger("%" + nameof(ContainerQueueConstants.PhoneFiles) + "%")] AgencyOutreachMessage msg, 
     [SendGrid] out Mail message 
     ) 
{ 
    StringWriter swLogger = new StringWriter(); 

    try 
    { 
     GeneratePhoneFileJob fmJob = new GeneratePhoneFileJob(swLogger, msg); 

     fmJob.Execute(); 
    } 
    catch(Exception e) 
    { 
     swLogger.WriteLine($"{nameof(GeneratePhoneFileJob)} triggered an exception, message was: {e.Message}"); 
    } 

    message = new Mail(); 

    message.Subject = "Phone File Job"; 
    message.AddContent(new Content("text/plain", "Completed the Phone File Job")); 
    message.AddContent(new Content("text/plain", swLogger.ToString())); 

    Personalization personalization = new Personalization(); 
    personalization.AddTo(new Email("[email protected]", "Mark Olbert")); 
    message.AddPersonalization(personalization); 
} 

私が呼び出しをしない場合はここで

は、スタートアップコードですアプリケーションのスタートアップコードでUseSendGrid()メソッド定義が解析されているときに例外が発生し、UseSendGrid()を必ず呼び出すように指示します。しかし、上記のように、UseSendGrid()は爆発します。

も例外、しかし、トムの例に基づいた電子メールのいずれかを

、私はそれが出てメールパラメータを使用していなかったので、メッセージ処理機能を変更し、単純に構築されており、内部からのメールを送りましたメソッド本体:

SendGridAPIClient sg = new SendGridAPIClient("redacted"); 
Mail message = new Mail(); 

message.Subject = "Phone File Job"; 
message.AddContent(new Content("text/plain", "Completed the Phone File Job")); 
message.AddContent(new Content("text/plain", swLogger.ToString())); 

Personalization personalization = new Personalization(); 
personalization.AddTo(new Email("redacted", "Mark Olbert")); 
message.AddPersonalization(personalization); 

sg.client.mail.send.post(requestBody: message.Get()); 

コンソールアプリは今も元気を起動し、メッセージプロセッサが正常に動作...しかし、電子メールは送信されません取得します。または、むしろ、誰も到着せず、SendGrid.comでダッシュボードを確認すると、何の活動も記録されません。

成功!

私はついにこれを動作させました。 「最終的な」問題は、私が作成していた電子メールの差出人アドレスを含めることを怠ったということでした。私がそれをしたら、それは魅力のように働いた。

+0

SendGridMail.dllアセンブリのバージョンの不一致があるように見えるん。エラーが発生しました。 "SendGrid.Helpers.Mail.Mail"と入力するためにSendGridAttributeをバインドできません。 –

答えて

2

mydemoコードを使用してください。私はWebJobs.Extensions.SendGridライブラリを使用して、私はそれをテストしました。 WebAppに公開した後、WebJobで正常に動作します。 以下は私のテストコードとパッケージです。設定ファイル:

using System; 
using System.Threading.Tasks; 
using SendGrid.Helpers.Mail; 
using SendGrid; 
namespace TestWebJob 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     Console.WriteLine($"Start to run the Execute"); 
     Execute().Wait(); 
     Console.WriteLine($"Task finished"); 

    } 
    static async Task Execute() 
    { 
     string apiKey = "your sendgrid API key"; 
     dynamic sg = new SendGridAPIClient(apiKey); 
     Email from = new Email("[email protected]");//a test email address 
     string subject = "Hello World from the SendGrid CSharp Library!"; 
     Email to = new Email("[email protected]");// another test email address 
     Content content = new Content("text/plain", "Hello, Email!"); 
     Mail mail = new Mail(from, subject, to, content); 
     dynamic response = await sg.client.mail.send.post(requestBody: mail.Get()); 
    } 
    } 
} 

packages.configファイルには、次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" /> 
    <package id="Microsoft.Azure.WebJobs" version="1.1.1" targetFramework="net452" /> 
    <package id="Microsoft.Azure.WebJobs.Core" version="1.1.1" targetFramework="net452" /> 
    <package id="Microsoft.Azure.WebJobs.Extensions" version="1.0.1" targetFramework="net452" /> 
    <package id="Microsoft.Azure.WebJobs.Extensions.SendGrid" version="1.0.1" targetFramework="net452" /> 
    <package id="Microsoft.Data.Edm" version="5.6.2" targetFramework="net452" /> 
    <package id="Microsoft.Data.OData" version="5.6.2" targetFramework="net452" /> 
    <package id="Microsoft.Data.Services.Client" version="5.6.2" targetFramework="net452" /> 
    <package id="Microsoft.Tpl.Dataflow" version="4.5.24" targetFramework="net452" /> 
    <package id="Microsoft.Web.WebJobs.Publish" version="1.0.12" targetFramework="net452" /> 
    <package id="Microsoft.WindowsAzure.ConfigurationManager" version="1.8.0.0" targetFramework="net452" /> 
    <package id="ncrontab" version="2.0.0" targetFramework="net452" /> 
    <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net452" /> 
    <package id="Sendgrid" version="8.0.5" targetFramework="net452" /> 
    <package id="SendGrid.CSharp.HTTP.Client" version="3.0.0" targetFramework="net452" /> 
    <package id="SendGrid.SmtpApi" version="1.3.1" targetFramework="net452" /> 
    <package id="System.Spatial" version="5.6.2" targetFramework="net452" /> 
    <package id="WindowsAzure.Storage" version="4.3.0" targetFramework="net452" /> 
</packages> 
+0

Thanx、Tom、それでも私には同じエラーが表示されます。この問題は、私のアプリケーション起動コードでUseSendGrid()を指定することに関連しているようです。私は私の質問に詳細を追加しました。 –

+1

トム、私は答えとしてあなたの応答をマークしました。私はアプローチを少し変更しなければならなかった。しかし、重要なステップ - 最新のSendGridアセンブリを使用し、Azureエクステンションの例で使用されているoutパラメータアプローチを使用せずに、メソッド本体に電子メールメッセージを作成することが重要でした。 詳細を知りたい方は、最新の安定版Azure Extensionsが古いバージョンのSendGridアセンブリを使用しているという問題があります。 SendGrid APIは以来、>> log <<を変更しました。拡張機能の次のバージョンが出るまでは、Tomのアプローチが優れています。 –

関連する問題