我對WCF服務相當陌生,希望對此有所幫助。我試圖運行WCF作爲一項服務,並讓另一臺機器上的ASP.net客戶端能夠通過連接到WCF服務將文件上傳到它。UploadFile:此操作在WCF測試客戶端不支持,因爲它使用類型ClientFileInfo
我正在測試它與一個簡單的上傳設置(從here),它工作正常,如果我只是引用WCF服務作爲「DLL」,但如果我嘗試運行在它作爲WCF服務,它給了我一個錯誤爲「UploadFile」方法指出它不受支持。
在方法名稱上帶有紅色X的確切消息:此操作在WCF Test Client中不受支持因爲它使用了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不支持流,即使我們可以有一個類型流的綁定。我對此感到困惑,以及我做錯了什麼。
謝謝你的幫助。
感謝@M汗我自己讀了你的答案之後就發現了這個錯誤:) –
這是否意味着我無法使用WCF測試客戶端測試我的上傳方法,因爲Stream成員? – user3818229
當時我在處理這個問題時,無法使用WCF測試客戶端進行測試。我不確定它是否已經更新。如果不能使用測試客戶端進行測試,那麼另一個顯而易見的方法就是使用測試客戶端並查看它是否有效。 –