所以我使用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方法的任何其他方法。
谢谢,
答案 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)
我刚注意到操作网址中没有指定端口。根据您的开发环境,这可能完全没问题,但值得一提。