0

json文字列をwcfサービスに投稿しようとしています。問題は、私のWCFメソッドがJSONだけでなくStreamオブジェクトを想定していることです。

WCFのメソッドヘッダーは次のとおりです。

    [WebInvoke(Method = "POST", UriTemplate = "person/delete", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    Person DeletePerson(Stream streamdata)

これが私が試していることです:

    HttpPost request = new HttpPost(SERVICE_URI + uri);
    InputStream is = new ByteArrayInputStream(data.getBytes());
    InputStreamEntity ise = new InputStreamEntity(is, data.getBytes().length);
    ise.setContentType("application/x-www-form-urlencoded");
    ise.setContentEncoding(HTTP.UTF_8);
    request.setEntity(ise);
    HttpResponse response = null;
    try {
        response = client.execute(request);
    } catch (ClientProtocolException e) 
    {
        e.printStackTrace();
    } catch (IOException e) 
    {
        e.printStackTrace();
    }

私はこれで400の悪い要求を受け取り、他のすべてを試しました。誰かが私がこれを機能させるのを手伝ってくれませんか!?また、カスタム認証コードを使用しているため、HttpClientを使用して実行する必要があります。

4

1 に答える 1

4
HttpPost request = new HttpPost(SERVICE_URI + uri);
    AbstractHttpEntity entity = new AbstractHttpEntity() {
        public boolean isRepeatable() { return true; }
        public long getContentLength() { return -1; }
        public boolean isStreaming() { return false; }
        public InputStream getContent() throws IOException { throw new     UnsupportedOperationException(); }
        public void writeTo(final OutputStream outstream) throws IOException {
            Writer writer = new OutputStreamWriter(outstream, "UTF-8");
            writer.write(arr, 0, arr.length);
            writer.flush();
        }
    };

    entity.setContentType("application/x-www-form-urlencoded");
    entity.setContentEncoding(HTTP.UTF_8);
    request.setEntity(entity);
    HttpResponse response = null;
    InputStream bais = null;
    String result = null;
    try {
        response = client.execute(request);
        HttpEntity he = response.getEntity();
        bais = he.getContent();
        result = convertStreamToString(bais);
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    }
于 2012-12-14T20:38:29.037 に答える