UploadFile:WCF测试客户端不支持此操作,因为它使用类型ClientFileInfo

时间:2012-11-28 19:18:28

标签: c# asp.net wcf wcf-binding filestream

我对WCF服务还不熟悉,并希望得到一些帮助。我正在尝试将WCF作为一项服务运行,并在另一台机器上安装一个ASP.net客户端,能够通过连接到WCF服务将文件上传到它。

我正在使用简单的上传设置(来自here)对其进行测试,如果我只是将WCF服务引用为“dll”,它可以正常工作但如果我尝试将其作为WCF服务运行它我说“UploadFile”方法的错误是声明它不受支持。

方法名称上带有红色X的确切消息:WCF测试客户端不支持此操作因为它使用类型FileUploadMessage。

我首先在Visual Studio 2012中创建一个WCF服务应用程序,并在我的界面中添加以下内容(IUploadService.cs):

[ServiceContract]
public interface IUploadService
{
    [OperationContract(IsOneWay = true)]
    void UploadFile(FileUploadMessage request);
}

[MessageContract]
public class FileUploadMessage
{
    [MessageBodyMember(Order = 1)]
    public Stream FileByteStream;
}

它的实现方式如此(UploadService.svc.cs):

public void UploadFile(FileUploadMessage request)
{
    Stream fileStream = null;
    Stream outputStream = null;

    try
    {
         fileStream = request.FileByteStream;

         string rootPath = ConfigurationManager.AppSettings["RootPath"].ToString();

         DirectoryInfo dirInfo = new DirectoryInfo(rootPath);
         if (!dirInfo.Exists)
         {
             dirInfo.Create();
         }

         // Create the file in the filesystem - change the extension if you wish, 
         // or use a passed in value from metadata ideally

         string newFileName = Path.Combine(rootPath, Guid.NewGuid() + ".jpg");

         outputStream = new FileInfo(newFileName).OpenWrite();
         const int bufferSize = 1024;
         byte[] buffer = new byte[bufferSize];

         int bytesRead = fileStream.Read(buffer, 0, bufferSize);

         while (bytesRead > 0)
         {
             outputStream.Write(buffer, 0, bufferSize);
             bytesRead = fileStream.Read(buffer, 0, bufferSize);
         }
     }
     catch (IOException ex)
     {
          throw new FaultException<IOException>(ex, new FaultReason(ex.Message));
     }
     finally
     {
         if (fileStream != null)
         {
             fileStream.Close();
         }
         if (outputStream != null)
         {
             outputStream.Close();
         }
     }
} // end UploadFile

从它的外观应该可以工作,但从我通过查看几个stackoverflow和其他论坛问题的理解,似乎WCF不支持Stream,即使我们可以有类型流的绑定。我对此感到困惑,以及我做错了什么。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在与我的blog上的Adam沟通后,我从中获得了代码,我意识到我正在以错误的方式测试它。一切都正确实现,但使用WCF测试客户端搞砸了。只需启动项目并通过将其添加为“Service.svc”的Web引用来消费它,就可以完美地工作。