正在重命名的WebService参数对象

时间:2009-03-26 17:21:09

标签: c# web-services

这是我第一次使用网络服务,所以问题可能有点基础。无论如何,我有一个web服务作为我们供应商网站的代理。它简化了我们通常不得不做的“屏幕刮擦”。 webservice函数如下所示:

namespace foo  
{  
  public class MyService : WebService  
  {
     [WebMethod]  
     public string UploadFile(System.IO.FileStream fileToUpload)  
     {
        return _obj.Upload(fileToUpload);  
     }  
  }  
}    

当您尝试向该方法提供该方法要求的FileStream时,客户端会抛出错误。在某个地方的编译中,webservice将参数的类型从System.IO.FileStream更改为foo.FileStream。有没有人对我如何做到这一点有任何想法?

提前致谢!

2 个答案:

答案 0 :(得分:0)

在.NET中,当您跨应用程序域进行调用时(就像您在这里一样),您无法传递特定于该应用程序域的数据。

这个的一般版本是,当您在两个单独的进程之间进行调用时,您不能向该进程发送特定的信息(即仅在该上下文中具有重要性)并期望它在另一个进程中具有重要性过程

这就是你在使用文件流做的事情。文件流是OS上特定于进程的文件的句柄。无法保证同一台计算机上的进程,更不用说其他计算机上的进程就能理解这一点。

这是一个Web服务,这正是您所拥有的情况,因为您在不同的计算机上有两个进程。

要解决此问题,您发送的数据必须是自包含的。在这种特定情况下,这意味着发送整个文件的内容。

您应该将参数更改为字节数组,然后在方法中适当地处理字节。

答案 1 :(得分:0)

ASMX Web服务不支持使用System.IO.Stream或任何派生类型的Stream。你需要WCF。