2011-05-15 133 views
2

我正在嘗試構建iPhone應用程序和c#WCF服務以將圖像上載到SQL服務數據庫。從iPhone上傳圖像到WCF服務

我有我的應用程序突破的圖像向下的NSData,並使用下面的代碼張貼開了一個WCF服務:

NSData *imageData = UIImageJPEGRepresentation(self.image, 90); 

NSURL *url = [NSURL URLWithString:@"http://example.com/ImageDiaryService.svc/json/AddMediaItem"]; 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request setPostValue:@"Test" forKey:@"Name"]; 
[request setPostValue:@"Test description." forKey:@"Description"]; 
[request setPostValue:@"JPEG" forKey:@"ImageType"]; 
[request setPostValue:@"iPhone" forKey:@"MediaType"]; 

[request setData:imageData withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" forKey:@"ImageData"]; 

[request setDidFinishSelector:@selector(uploadFinished:)]; 
[request setDidFailSelector:@selector(uploadFailed:)]; 
[request setDelegate:self]; 
[request startAsynchronous]; 

我遇到的問題是與Web服務。我不確定我應該從應用程序POST接收什麼類型的數據。我試着將它作爲一個字節數組接收,但沒有奏效。

我的WCF服務是一個REST服務。

任何幫助,非常感謝。

回答

5

嘗試將其作爲流接收。在http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspx的博客文章展示瞭如何在WCF REST服務中接收任意數據。

+0

如果我通過Stream接收圖像,我能夠向服務發佈數據合同嗎?我在你的帖子上讀到Stream參數必須是通過帖子主體傳遞的唯一參數? – 2011-05-17 19:30:24

+0

不,您不會收到它作爲數據協定,但如果您確實需要數據協定,那麼您需要以可爲其創建數據協定(XML或JSON)的格式對圖像進行編碼。在這兩種情況下,都會有一些perf命中(對於XML,您需要對圖像進行64位編碼,在JSON上它更糟糕,因爲byte []值表示爲整數數組)。爲什麼您需要爲此操作傳遞數據合同(您只需傳遞文件內容?對於服務中的其他操作,如果需要,仍然可以使用數據合同。) – carlosfigueira 2011-05-17 20:12:49

+0

我需要上傳圖像以及其他一些參數(名稱,描述,來源,圖像類型等),你會建議什麼是最好的方法來處理這個問題?我想我可以創建兩種方法,一種上傳圖像,另一種上傳數據,但它會更快它使用Base64相比,做兩個職位到我的服務? – 2011-05-17 20:19:37