将图像从iOS上传到WCF,错误415(不支持的媒体)

时间:2013-11-08 12:06:43

标签: c# ios iphone wcf http

我正在尝试将iphone拍摄的照片上传到 WCF RESTful服务器,我已经在网上查看了有关此问题的示例和其他答案,但我不能给出解决方案。

应用程序是用 iOS6 编写的,而我正在使用 AFNetworking 2.0 上传图片。由于在模拟器中相机不起作用,我一直在尝试使用库照片。我认为问题在于格式差异, WCF请求Stream参数,我不知道AFNetworking如何发送信息......

以下是 WCF代码:

[WebInvoke(Method = "POST", UriTemplate = "FileUpload")]
        public void FileUpload(Stream stream)
        {
            try
            {
                byte[] buffer = new byte[10000];
                stream.Read(buffer, 0, 10000);
                FileStream f = new FileStream("C:\\temp\\sample.jpg", FileMode.OpenOrCreate);
                f.Write(buffer, 0, buffer.Length);
                f.Close();
                stream.Close();
                System.Console.WriteLine("Recieved the image on server");
            }
            catch (Exception e) 
            {
                System.Console.WriteLine("ERROR:  " + e.ToString());
            }
        }

iOS代码:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    NSDictionary *parameters = @{@"foo": @"bar"};
    NSURL *filePath = [NSURL fileURLWithPath:@"Users/juan/Library/Application Support/iPhone Simulator/6.1/Media/DCIM/100APPLE/IMG_0001.JPG"];
    [manager POST:@"http://192.168.2.3:8732/wave/FileUpload" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileURL:filePath name:@"image" error:nil];
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Success: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];

fiddler 中测试网络服务时,它会通过发送图片 415不支持的媒体来引发相同的错误。

我让服务器的 app.config

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="2097151"
    useFullyQualifiedRedirectUrl="true"
    executionTimeout="14400"   />
  </system.web>
  <system.serviceModel>

    <services>
      <service name="WcfJsonRestService.waveWS">
        <endpoint address="http://localhost:8732/wave"
              binding="wsHttpBinding"
              bindingConfiguration="wsHttp"
              contract="WcfJsonRestService.IWaveWS"/>
      </service>
    </services>
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttp" maxReceivedMessageSize ="50000000" messageEncoding="Mtom" maxBufferPoolSize="50000000" >

          <readerQuotas maxArrayLength="50000000" />

          <security mode="None" />

        </binding>

      </wsHttpBinding>
    </bindings>

  </system.serviceModel>
  <system.diagnostics>

有任何想法或建议如何解决这个问题? 欢迎任何想法

修改 最后我解决了自己,问题发生在app.config。

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="WebConfiguration"
                 maxBufferSize="65536"
                 maxReceivedMessageSize="2000000000"
                 transferMode="Streamed">
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="WebBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="WcfJsonRestService.waveWS">
          <serviceMetadata httpGetEnabled="true" httpGetUrl="" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="WcfJsonRestService.waveWS">
        <endpoint address="http://localhost:8732/wave"
              binding="webHttpBinding"
        behaviorConfiguration="WebBehavior"
        bindingConfiguration="WebConfiguration"
              contract="WcfJsonRestService.IWaveWS"/>
      </service>
    </services>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>

0 个答案:

没有答案