2011-05-15 137 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