使用WCF模板40将文件从Android(2.3.4)上载到WCF 4.0 REST服务

时间:2012-02-23 18:18:43

标签: android wcf rest c#-4.0 wcf-binding

我正在尝试使用以下代码从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();
    }
}

它总是检索错误的请求。

另一方面,我使用模板40制作了WCF REST服务:

[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 :(得分:-1)

问题在于WCF中的绑定!改变他们使它工作!