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

tôi nhận được:WCF Service thất bại trong việc gửi mail thông qua MailDefinition

Giá trị không thể null. Tên tham số: basepath

tại System.Web.Util.UrlPath.Combine (String appPath, String basepath, Chuỗi tương đối)
tại System.Web.UI.WebControls.MailDefinition.CreateMailMessage ( nhận String, IDictionary thay thế, chủ sở hữu Control)
tại Damnation.Website.Main.Common.MailTemplating.Server.SendCreationMail (MembershipUser người dùng, IServerAccountRequest yêu cầu, chủ sở hữu Control)
tại Damnation.Website.Main.Common.MailTemplating.Server.SendCreationMail (IServerAccountRequest yêu cầu)
tại Damnation.Website.Main.Business.Model.ServerAccountRequest.UpdateRequestsAfterServerProcessing (IEnumerable`1 kết quả)

Thing là tôi không có kiểm soát thực tế để vượt qua nó, tôi muốn biết làm thế nào để thiết lập một điều khiển tránh được ngoại lệ vô nghĩa này. Tôi đang sử dụng một con đường tương đối ... vì vậy điều này không có ý nghĩa.

Các ứng dụng mà có các dịch vụ đang được ASP.NET WebForms .NET 4. Việc áp dụng tiêu dùng là một ứng dụng giao diện điều khiển cũng dưới NET 4

Trả lời

4

tôi đã cùng một vấn đề, và tôi biết rằng điều này xảy ra vì nó không thể tìm thấy đường dẫn của điều khiển khi cố gắng thực thi tệp definition.CreateMailMessage của bạn. Bạn muốn tạo một điều khiển người dùng web trống. Có lẽ đây không phải là giải pháp thanh lịch nhất nhưng nó hoạt động.

Đây là những gì tôi đã làm:

1) Thêm tệp kiểm soát người dùng Web trong dự án của bạn, ví dụ Test.ascx.

2) Trong file .svc bạn thêm đoạn mã sau:

Page page = new Page(); 

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

3) Cập nhật dòng definition.CreateMailMessage của bạn để:

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

Bạn sẽ không còn nhận được sự basepath rỗng ngoại lệ.

+0

Tôi nhận được ngoại lệ về lệnh gọi 'LoadControl':" đường dẫn ảo tương đối không được phép ở đây ". Đây là một ứng dụng giao diện điều khiển trong .Net 4.5.2 trên Cộng đồng VS 2015. –

0

Tôi đã có cùng một vấn đề nhưng đó là vì tôi đã ở trên một ứng dụng .NET console. Khi tôi chuyển mã cho ASP.NET, tôi không chạy tốt mà không tạo Trang và Kiểm tra.

Các vấn đề liên quan