Windows phone 8 IXMLHTTPRequest2上载失败

Windows phone 8 IXMLHTTPRequest2上载失败,windows-phone-8,windows-runtime,c++-cx,Windows Phone 8,Windows Runtime,C++ Cx,我正在创建一个WP8应用程序,将图片上传到我们的服务器 为此,我创建了一个Windows Phone组件,用于使用IXMLHTTPRequest2执行所有连接任务。 我遇到的问题是,当我上传图片并花费比预期稍长的时间时,我在OneError函数中遇到以下错误:INET_E_下载失败(0x800C0008L) 研究问题时,手机似乎停止发送数据,但有时在长时间(可能1分钟)后,它会继续发送更多字节(不是剩余的字节),因此问题在于,几乎每次通信都会中断,即使服务器仍在等待信息。 如果我使用WiFi连接

我正在创建一个WP8应用程序,将图片上传到我们的服务器

为此,我创建了一个Windows Phone组件,用于使用IXMLHTTPRequest2执行所有连接任务。 我遇到的问题是,当我上传图片并花费比预期稍长的时间时,我在OneError函数中遇到以下错误:INET_E_下载失败(0x800C0008L) 研究问题时,手机似乎停止发送数据,但有时在长时间(可能1分钟)后,它会继续发送更多字节(不是剩余的字节),因此问题在于,几乎每次通信都会中断,即使服务器仍在等待信息。 如果我使用WiFi连接,没有问题,因为发送图片不会花费太多时间

有没有人遇到过类似的问题?我能做些什么来解决这个问题

代码(摘要)为:

ComPtr\u httpRequest=NULL;
comptrxhrcallback=NULL;
ComPtr_mhtmlInternal=NULL;
取消\令牌\源\取消令牌源;
hResultXHR=CoCreateInstance(CLSID_XmlHttpRequest、nullptr、CLSCTX_INPROC、IID_PPV_ARGS(&_httpRequest));
dwError=getURI(&pwcURI,此->\u主机->数据(),此->\u cgiPath->数据(),此->\u端口,此->\u安全);
_cancellationTokenSource=取消令牌源();
_mhtmlInternal=Make(_httpRequest.Get(),_cancellationTokenSource.Get_token(),nullptr);
如果(hResultXHR==S_OK)
hResultXHR=_mhtmlintternal.As(&u xhrCallback);
如果(hResultXHR==S_OK)
hResultXHR=\u httpRequest->Open(L“Post”//Método a utilizar
普居里,
_xhrCallback.Get(),
nullptr,
nullptr,
nullptr,
nullptr);
如果(hResultXHR==S_OK)
hResultXHR=\u httpRequest->SetProperty(XHR\u PROP\u TIMEOUT,\u timeReadOut);
如果(hResultXHR==S_OK)
hResultXHR=\u httpRequest->SetRequestHeader(L“Content-Type”,L“text/plain;charset=utf-8”);
如果(hResultXHR==S_OK)
hResultXHR=CreateStreamOnHGlobal(NULL、TRUE和_pISendStream);
如果(hResultXHR==S_OK)
hResultXHR=CreateStreamOnHGlobal(NULL、TRUE和_pIRecvStream);
如果(hResultXHR==S_OK)
{
如果(_pISendStream!=NULL)
hResultXHR=\u httpRequest->Send(\u pISendStream,p->ulSize);
其他的
hResultXHR=\u httpRequest->Send(nullptr,0);
}
返回create_async([this,_mhtmlintternal,hResultXHR]()->int
{
_mhtmlInternal->CreateDataTask();
_mhtmlInternal->CreateDataTask().wait();
_statusCode=0;
HRESULT hResultXHR=\u mhtmlInternal->GetError();
如果(hResultXHR==S_OK)
{
_statusCode=\uMHTMLinternal->GetStatusCode();
自动推理短语=_mhtmlInternal->GetReasonPhrase();
如果(_statusCode==200)
{
//做事
}
}
如果(此->\u pIRecvStream!=NULL)
{
这个->\u pIRecvStream->Release();
此->\u pIRecvStream=NULL;
}
如果(此->\u pISendStream!=NULL)
{
这个->_pISendStream->Release();
此->\u pISendStream=NULL;
}
返回(此->dwError);
});
您应该看看
ComPtr<IXMLHTTPRequest2>                _httpRequest = NULL;
ComPtr<IXMLHTTPRequest2Callback>    _xhrCallback = NULL;
ComPtr<html_internal>                _mhtmlInternal = NULL;
cancellation_token_source                _cancellationTokenSource;

hResultXHR = CoCreateInstance(CLSID_XmlHttpRequest, nullptr, CLSCTX_INPROC, IID_PPV_ARGS(&_httpRequest));
dwError = getURI(&pwcURI, this->_host->Data(), this->_cgiPath->Data(), this->_port, this->_secure);
_cancellationTokenSource = cancellation_token_source();
_mhtmlInternal = Make<html_internal>(_httpRequest.Get(), _cancellationTokenSource.get_token(), nullptr);
if (hResultXHR == S_OK)
    hResultXHR = _mhtmlInternal.As(&_xhrCallback);
if (hResultXHR == S_OK)
    hResultXHR = _httpRequest->Open(L"Post", //Método a utilizar
        pwcURI,
        _xhrCallback.Get(),
        nullptr,
        nullptr,
        nullptr,
        nullptr);
if (hResultXHR == S_OK)
    hResultXHR = _httpRequest->SetProperty(XHR_PROP_TIMEOUT, _timeReadOut);
if (hResultXHR == S_OK)
    hResultXHR = _httpRequest->SetRequestHeader(L"Content-Type", L"text/plain;charset=utf-8");
if (hResultXHR == S_OK)
    hResultXHR = CreateStreamOnHGlobal(NULL, TRUE, &_pISendStream);
if (hResultXHR == S_OK)
    hResultXHR = CreateStreamOnHGlobal(NULL, TRUE, &_pIRecvStream);
if (hResultXHR == S_OK)
{
    if (_pISendStream != NULL)
        hResultXHR = _httpRequest->Send(_pISendStream, p->ulSize);
    else
        hResultXHR = _httpRequest->Send(nullptr, 0);
}
return create_async([this, _mhtmlInternal, hResultXHR]() -> int
{
    _mhtmlInternal->CreateDataTask();
    _mhtmlInternal->CreateDataTask().wait();
    _statusCode = 0;
    HRESULT hResultXHR = _mhtmlInternal->GetError();
    if (hResultXHR == S_OK)
    {
        _statusCode = _mhtmlInternal->GetStatusCode();
        auto reasonPhrase = _mhtmlInternal->GetReasonPhrase();
        if (_statusCode == 200)
        {
            //Do stuff
        }
    }
    if (this->_pIRecvStream != NULL)
    {
        this->_pIRecvStream->Release();
        this->_pIRecvStream = NULL;
    }
    if (this->_pISendStream != NULL)
    {
        this->_pISendStream->Release();
        this->_pISendStream = NULL;
    }
    return (this->dwError);
});