使用表单输入将文件上载到Web服务时遇到问题

时间:2011-02-12 15:02:28

标签: c# asp.net web-services

所以我使用ASP.NET 2.0并尝试使用简单的表单将文件上传到Web服务。

我将操作属性设置为我的Web服务的URL。但是,在Firefox中,我根本看不到它正在调用该服务 注意:我可以将以下“Action”值输入浏览器减去Web方法的名称,并获取显示可用Web方法的页面,因此我认为“Action”属性的URL是正确的。

<form id="fileUpload" action="http://localhost/AcmeABC/services/FileUploadService.asmx/ImportRates" method="post" enctype="multipart/form-data">
<input type="text" id="fileName"  name="fileName" />
<asp:FileUpload runat="server" id="fileArray"/>
<input type="submit" value="Submit" /> 

[WebService(Namespace = "http://www.abc.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
[ScriptService]
public class FileUploadService : System.Web.Services.WebService {

    [WebMethod]
    public void ImportRates(string fileName, byte[] fileArray) {
        try {
            MemoryStream memoryStream = new MemoryStream(fileArray);
        }
        catch (Exception ex) {
            string error = string.Format("Error thrown for file {0} with {1} error.", fileName, ex);
        }
    }

我怎么能看到发生的事情,因为我没有看到任何电话。

我也认为这可能不是最好的方法。我是整个Web开发领域的新手,所以我试图找到更好的方法来处理问题。请建议可能建议将文件上传到Web方法的任何其他方法。

谢谢,

3 个答案:

答案 0 :(得分:2)

问题在于将二进制数据作为参数输入读取。你需要从HttpContext输入流中读取数据

按如下方式修改您的网络服务方法

[WebMethod]
public void ImportRates()
{
    try
    {


        //HTTP Context to get access to the submitted data
        HttpContext postedContext = HttpContext.Current;
        //File Collection that was submitted with posted data
        HttpFileCollection files = postedContext.Request.Files;
        //Make sure a file was posted
        string fileName =files[0].FileName;

        MemoryStream memoryStream = new MemoryStream(files[0].InputStream);


    }
    catch (Exception ex1)
    {
        string error = string.Format("Error thrown for file {0} with {1} error.", fileName, ex);

    }
}

答案 1 :(得分:0)

你能告诉我们ImportRates web方法中的代码吗?它看起来像网络方法here吗?

除了用于文件上传的Web服务之外,另一个选择是ASHX handler。您可以将ashx处理程序视为没有视图的asp.net代码隐藏文件。一般来说,ashx处理程序被认为比Web服务更轻量级。

答案 2 :(得分:0)

我刚注意到操作网址中没有指定端口。根据您的开发环境,这可能完全没问题,但值得一提。