将FileUpload内容传递给[WebMethod]的正确方法?

时间:2012-05-03 13:01:08

标签: c# web-services file-upload parameter-passing webmethod

我有一个[WebMethod] Sendemail这个工作正常,但现在我要升级它以发送附件。我正在使用fileupload。这是我的方法Call。

lblEmailSent.Text = Send.Sendemail(txtTo.Text, txtSubject.Text, txtbody.Text, FileUpload1.PostedFile.FileName, FileUpload1.FileContent);

My Call Statement用蓝色下划线,给出的两个错误如下:

  

* 1) *最佳重载方法匹配'WebTestServiceApp.localhost.Service1.Sendemail(字符串,字符串,   string,string,WebTestServiceApp.localhost.Stream)'有一些无效   参数

     

* 2) *参数5:无法从'System.IO.Stream'转换为'WebTestServiceApp.localhost.Stream'

FileUpload1.PostedFile.FileName作为String传递FileUpload1.FileContent作为流传递

这是我的[WebMethod],现在你们都能看到我能看到的每一件事,我无法发现任何错误,但我不确定FileUpload1.FileContent是否应该作为Stream传递。

[WebMethod]
public string Sendemail(String inValueTo, String inValueSub, String inValueBody, String inValueAttachmentPostedfile, Stream inValueAttachemtnFileContent) //, String inValueAttachmentPostedfile, Stream inValueAttachemtnFileContent
{
    try
    {
        String valueTo = inValueTo;
        String valueSub = inValueSub;
        String valueBody = inValueBody;
        String valueAttachmentPostedfile = inValueAttachmentPostedfile; //FileUpload1.PostedFile.FileName
        Stream valueAttachmentFileContent = inValueAttachemtnFileContent;  //FileUpload1.FileContent.fileName

        System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage(); // Creating new message.

        message.To.Add(valueTo);
        message.Subject = valueSub;
        message.From = new System.Net.Mail.MailAddress("shaunmossop@mweb.co.za");
        message.Body = valueBody;
        message.IsBodyHtml = true;

          string fileName = Path.GetFileName(valueAttachmentPostedfile); // Get attachment file
         Attachment myAttachment =
                         new Attachment(valueAttachmentFileContent, fileName);
          if (fileName != "")
          {
              message.Attachments.Add(myAttachment); // Send attachment
          }

        System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.gmail.com"); //Properties.Settings.Default.MailSMTPServer

        smtp.Port = 587;
        smtp.EnableSsl = true;
        smtp.UseDefaultCredentials = false;

        NetworkCredential netC = new NetworkCredential(Properties.Settings.Default.username, Properties.Settings.Default.password); // Useing Projects defult settings.
        smtp.Credentials = netC;
        smtp.Send(message);

        return "Message has been sent";
    }
    catch (Exception)
    {
        return "Message faild to send" ;

    }
}

1 个答案:

答案 0 :(得分:0)

它给你的第二个错误击中了头部的钉子,是的,你传递的是字符串字符串字符串,但是你传递了错误类型的流以供它进行交互,它想要这种类型的WebTestServiceApp.localhost.Stream 你给它这种 System.IO.Stream

当你使用流时,尝试在第一次创建时将其明确声明为WebTestServiceApp.localhost.Stream,这样你就可以传递正确类型的流,你的问题就应该停止了!

您看到的两种类型的流,一种用于Web应用,另一种用于桌面应用。