2011-08-25 13 views
5
// stuff...... 

    return SendCreationMail(Membership.GetUser((Guid)request.UserEntityId), request, new Control()); 
} 

private const string TemplateRoot = "~/app_shared/templates/mail/"; 
private const string ServerRoot = TemplateRoot + "server/"; 

public static bool SendCreationMail(MembershipUser user, IServerAccountRequest request, Control owner) 
{ 
    var definition = new MailDefinition { BodyFileName = string.Concat(ServerRoot, "creation.htm"), IsBodyHtml = true }; 
    var subject = "New {0} account created!".FormatWith(request.ServerApplicationContract.Id); 

    var data = ExtendedData(DefaultData, subject, user); 

    data.Add("<%ServerApplication%>", request.ServerApplicationContract.Id); 
    data.Add("<%ServerApplicationName%>", request.ServerApplicationContract.ApplicationName); 
    data.Add("<%AccountUsername%>", request.AccountUsername); 

    data.Add("<%ServerInfo%>", "/server/{0}/info".FormatWith(request.ServerApplicationContract.Id.ToLower())); 

    return definition.CreateMailMessage(user.Email, data, owner).Send(subject, ApplicationConfiguration.MailSenderDisplayName); 
} 

ottengo:servizio WCF non riesce a inviare la posta attraverso MailDefinition

valore non può essere null. Nome del parametro: BasePath

a System.Web.Util.UrlPath.Combine (String AppPath, String BasePath, String relativo)
a System.Web.UI.WebControls.MailDefinition.CreateMailMessage (String destinatari, IDictionary sostituzioni, proprietario di controllo)
a Damnation.Website.Main.Common.MailTemplating.Server.SendCreationMail (MembershipUser utente, richiesta IServerAccountRequest, proprietario di controllo)
a Damnation.Website.Main.Common.MailTemplating.Server.SendCreationMail (Richiesta IServerAccountRequest )
a Damnation.Website.Main.Business.Model.ServerAccountRequest.UpdateRequestsAfterServerProcessing (IEnumerable`1 risultati)

fatto è che non ho un vero e proprio controllo di passare ad esso, mi piacerebbe sapere come per impostare un controllo che eviti questa eccezione priva di senso. Sto usando un percorso relativo ... quindi questo non ha senso.

L'applicazione che ha il servizio è in fase di ASP.NET WebForms .NET 4. L'applicazione consumer è un'applicazione console anche sotto .NET 4

risposta

4

Ho avuto lo stesso problema, e ho imparato che questo sta accadendo perché non riesce a trovare il percorso del controllo quando tenta di eseguire la definizione.CreateMailMessage. Si desidera creare un controllo utente Web vuoto. Forse questa non è la soluzione più elegante ma funziona.

Questo è quello che ho fatto:

1) Aggiungere un file di controllo utente Web nel progetto, per esempio Test.ascx.

2) Nel file .svc aggiungere il seguente codice:

Page page = new Page(); 

Test test = (Test)page.LoadControl("Test.ascx"); 

3) Aggiorna il tuo linea di definition.CreateMailMessage a:

return definition.CreateMailMessage(user.Email, data, test).Send(subject, ApplicationConfiguration.MailSenderDisplayName); 

Non sarà più ottenere il BasePath un'eccezione null.

+0

Ricevo un'eccezione sulla chiamata 'LoadControl':" il percorso virtuale relativo non è consentito qui ". Questa è un'applicazione console in .Net 4.5.2 su VS 2015 Community. –

0

Ho avuto lo stesso problema ma era perché ero su un'applicazione di console di progetto .NET, quando ho passato il codice a ASP.NET non eseguo bene senza creare Page e Test.

Problemi correlati