डाल कि अब काम करता था किसी कारण मेरी नीचे कोड के लिए फलस्वरूप एक अपवाद को जन्म देती है:सी # HttpClient
public static async Task<string> HttpPut(string inUrl, string inFilePath)
{
using (var handler = new HttpClientHandler
{
AllowAutoRedirect = false
})
{
using (var client = new HttpClient(handler))
{
//var content = new StreamContent(new FileStream(inFilePath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true));
using (var content = new StreamContent(new FileStream(inFilePath, FileMode.Open)))
{
content.Headers.Remove("Content-Type");
content.Headers.Add("Content-Type", "application/octet-stream");
using (var req = new HttpRequestMessage(HttpMethod.Put, inUrl))
{
string authInfo = String.Format("{0}:{1}", Program.Config.MediaStorageList.Find(o => o.Name == "Viz Media Engine Test").UserName, Program.Config.MediaStorageList.Find(o => o.Name == "Viz Media Engine Test").Password);
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
req.Headers.Add("Authorization", "Basic " + authInfo);
req.Headers.Remove("Expect");
req.Headers.Add("Expect", "");
//req.Headers.TransferEncodingChunked = true;
req.Content = content;
// Ignore Certificate validation failures (aka untrusted certificate + certificate chains)
ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
using (HttpResponseMessage resp = await client.SendAsync(req))
{
//This part is specific to the setup on an Expo we're at...
if (resp.StatusCode == HttpStatusCode.Redirect || resp.StatusCode == HttpStatusCode.TemporaryRedirect)
{
string redirectUrl = resp.Headers.Location.ToString();
if (redirectUrl.Contains("vme-store"))
{
redirectUrl = redirectUrl.Replace("vme-store", "10.230.0.11");
}
return await HttpPut(redirectUrl, inFilePath);
}
resp.EnsureSuccessStatusCode();
return await resp.Content.ReadAsStringAsync();
}
}
}
}
}
}
अपवाद मैं हो रही है:
System.NotSupportedException was unhandled
HResult=-2146233067
Message=The stream does not support concurrent IO read or write operations.
Source=System
StackTrace:
at System.Net.ConnectStream.InternalWrite(Boolean async, Byte[] buffer, Int32 offset, Int32 size, AsyncCallback callback, Object state)
at System.Net.ConnectStream.BeginWrite(Byte[] buffer, Int32 offset, Int32 size, AsyncCallback callback, Object state)
at System.Net.Http.StreamToStreamCopy.BufferReadCallback(IAsyncResult ar)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at VizWolfInnerServer.Tools.HttpConnector.<HttpPut>d__39.MoveNext() in c:\Users\christer\Documents\Visual Studio 2012\Projects\VizWolfNew\VizWolfInnerServer\Tools\HttpConnector.cs:line 202
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at VizWolfInnerServer.Tools.VizAPIConnector.<VmeUploadMedia>d__0.MoveNext() in c:\Users\christer\Documents\Visual Studio 2012\Projects\VizWolfNew\VizWolfInnerServer\Tools\VizAPIConnector.cs:line 187
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__1(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
InnerException:
मैं एक बहुत हो रही है HttpClient के लिए उचित दस्तावेज़ीकरण और उदाहरण ढूंढने में कठिन समय, और मैं यह पता लगाने के साथ संघर्ष कर रहा हूं कि यह अचानक क्यों काम नहीं करता है (स्ट्रीमकंटेंट की बजाय स्ट्रिंगकंटेंट के साथ पूरी तरह से समान विधि पूरी तरह से काम करता है) ...
यह मूल रूप से अपने आप धागे से बुलाया जाता है, और उसके बाद इस तरह:
public static async void VmeUploadMedia(string inUploadLink, string inFilePath)
{
string result = await HttpConnector.HttpPut(inUploadLink, inFilePath);
}
किसी को भी स्थान कुछ भी स्पष्ट?
धन्यवाद
अद्यतन
उनके भंडारण-नाम के साथ यह आईपी तो मैं वापस अपने मूल कोड को जा सकते हैं सबसे अच्छा समाधान थी मैप करने के लिए हो रही एक्सपो-लोग बाहर कर देता है। मेरी समस्या यह थी कि AllowAutoRedirect = false के साथ कुछ करना है। HttpResponseMessage resp = पर प्रतीक्षा करने का अपवाद। SendAsync (req), भले ही कोई पुनर्निर्देशन वास्तव में नहीं चल रहा हो। मैं एक तरह से कारण है कि यह भी हो रहा था, लेकिन इस कोड सब कुछ का उपयोग करने के रूप में खो रहा हूँ अब काम कर रहा है: जो मदद करने के लिए
यह आप के रूप में जवाब देने को जोड़ने के लिए ठीक है कोशिश कर रहे थे लोगों के लिए
धन्यवाद साइट पर एक वास्तविक उत्तर और सही उत्तर के रूप में चुनें। फिलहाल ऐसा लगता है कि यह एक अनुत्तरित प्रश्न है। – dmportella
अच्छा बिंदु, अब यह कर रहा है – CeeRo
क्या आप अब PutAsJsonAsync <> का उपयोग नहीं कर सकते? – niico