Загрузить файл из Android (2.3.4) в службу REST WCF 4.0 с помощью шаблона 40 WCF - PullRequest
0 голосов
/ 23 февраля 2012

Я пытаюсь загрузить файл с Android (2.3.4), используя приведенный ниже код, я понимаю, что я должен использовать многостраничную публикацию, если я также хочу отправить параметр. Это мой код Android:

public void uploadFile(File uploadFile) {
    HttpClient httpClient = new DefaultHttpClient();

    HttpPost postRequest = new HttpPost("http://192.168.0.102/application/services/sendfile/");
    ResponseHandler<String> responseHandler = new BasicResponseHandler();

    // Indicate that this information comes in parts (text and file)
    MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

try {

    //Create a JSON object to be used in the StringBody
    JSONObject jsonObj = new JSONObject();

    //Add some values
    jsonObj.put("filename", uploadFile.getName());

    //Add the JSON "part"
    reqEntity.addPart("entity", new StringBody(jsonObj.toString()));
}
catch (JSONException e) {
    Log.v("App", e.getMessage());
}
catch (UnsupportedEncodingException e) {
    Log.v("App", e.getMessage());
}

FileBody fileBody = new FileBody(uploadFile);//, "application/octet-stream");
    reqEntity.addPart("file", fileBody);

    try {
        postRequest.setEntity(reqEntity);

         //Execute the request "POST"
    HttpResponse httpResp = httpClient.execute(postRequest);

    //Check the status code, in this case "created"
    if(((HttpResponse) response).getStatusLine().getStatusCode() == HttpStatus.SC_CREATED){
        Log.v("App","Created");
    }
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Он всегда получает неверный запрос.

С другой стороны, у меня есть служба WCF REST, созданная с использованием шаблона 40:

[WebInvoke(
            Method = "POST",
            UriTemplate = "sendFile",
            BodyStyle = WebMessageBodyStyle.Wrapped)]
         public int sendFile(Stream receivedFile)
        {
           // How should I process the multipart file here to save it with its name on disk?
        }

У меня есть это в моем web.config

  <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
            <remove name="WebDAVModule" />
            <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        </modules>
        <directoryBrowse enabled="false" />
    </system.webServer>

    <system.serviceModel>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
        <standardEndpoints>
            <webHttpEndpoint>
                <!--
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint
            via the attributes on the <standardEndpoint> element below
        -->
                <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
            </webHttpEndpoint>
        </standardEndpoints>
    </system.serviceModel>

и это в моем global.asax

private void RegisterRoutes()
        {
            RouteTable.Routes.Add(new ServiceRoute("Service", new WebServiceHostFactory(), typeof(AccidentService)));
        }

Есть идеи, почему WCF не получает файл, если я ставлю в нем точку останова?

Если у кого-то есть лучший пример того, как отправить файл из Android (2.3.4) в WCF 4.0, буду очень признателен.

Заранее спасибо! Гильермо.

1 Ответ

0 голосов
/ 25 февраля 2012

Проблема была с привязками в WCF! изменение их заставило это работать!

...