2011-08-25 16 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); 
} 

me sale:WCF servicio no puede enviar correo a través de MailDefinition

El valor no puede ser nulo. Nombre de parámetro: BasePath

en System.Web.Util.UrlPath.Combine (String appPath, BasePath String, Cadena relativa)
en System.Web.UI.WebControls.MailDefinition.CreateMailMessage (String destinatarios, IDictionary reemplazos, dueño de control)
en Damnation.Website.Main.Common.MailTemplating.Server.SendCreationMail (MembershipUser usuario, solicitud IServerAccountRequest, dueño control)
en Damnation.Website.Main.Common.MailTemplating.Server.SendCreationMail (IServerAccountRequest solicitud)
en Damnation.Website.Main.Business.Model.ServerAccountRequest.UpdateRequestsAfterServerProcessing (IEnumerable`1 resultados)

cosa es que no tengo un control real de pasar a ella, me gustaría saber cómo para configurar un control que evite esta excepción sin sentido. Estoy usando una ruta relativa ... así que esto no tiene sentido.

La aplicación que tiene el servicio está bajo ASP.NET Web Forms .NET 4. La aplicación de los consumidores es una aplicación de consola también bajo .NET 4

Respuesta

4

que tenían el mismo problema, y ​​he aprendido que esto está sucediendo porque no puede encontrar la ruta del control cuando intenta ejecutar su definición.CreateMailMessage. Desea crear un control de usuario web en blanco. Tal vez esta no sea la solución más elegante, pero hace el trabajo.

Esto es lo que hice:

1) Añadir un archivo de control de usuario Web en su proyecto, por ejemplo Test.ascx.

2) En el archivo .svc agregue el siguiente código:

Page page = new Page(); 

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

3) Modificar una línea de definition.CreateMailMessage a:

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

Usted dejará de recibir la excepción nula ruta base.

+0

Recibo una excepción en la llamada 'LoadControl':" la ruta virtual relativa no está permitida aquí ". Esta es una aplicación de consola en .Net 4.5.2 en VS 2015 Community. –

0

Tuve el mismo problema pero fue porque estaba en una aplicación de consola .NET del proyecto, cuando pasé el código a ASP.NET no funcioné bien sin crear Página y Prueba.

Cuestiones relacionadas