5

我创建了一个基于 KSOAP-Android 和 JCIFS 的 NTLM 身份验证 SOAP 客户端。实现看起来像这样:

public class NtlmServiceConnection implements ServiceConnection 
{
    public NtlmServiceConnection(final SoapConnectionInfo connectionInfo, String path)      
    {
        httpclient = new DefaultHttpClient();
        httpclient.getAuthSchemes().register(AuthPolicy.NTLM, new NTLMSchemeFactory());

    //...

    @Override
    public InputStream openInputStream() throws IOException {
        ByteArrayEntity re = new ByteArrayEntity(bufferStream.toByteArray());
        post.removeHeaders("CONTENT-LENGTH");
        post.setEntity(re);
        HttpResponse rep = httpclient.execute(post);
        InputStream stream = rep.getEntity().getContent();
        return stream;
    }

    //....
}

从外观上看,KSOAP 正在生成正确的消息,因为bufferStream它按预期填充了 SOAP 信封。JCIFS 似乎正在完成它的工作,我可以看到 NTLM 挑战响应通过 Wireshark 进行。问题是缺少消息正文。它只是空的。因此,Web 服务遇到 501 并且InputStream返回为空。

任何人都知道为什么会发生这种情况?

注意:我正在删除下面的 CONTENT-LENGTH 标头,因为setEntity显然尝试设置它,但 KSOAP 已经设置它。我只是删除它并允许setEntity重置它。

4

1 回答 1

1

我终于想通了,并在这里写了博客:http ://csharpening.net/blog/?p=271

于 2010-11-30T01:44:05.037 回答