本文整理汇总了C#中System.Result.Catch方法的典型用法代码示例。如果您正苦于以下问题:C# Result.Catch方法的具体用法?C# Result.Catch怎么用?C# Result.Catch使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Result
的用法示例。
在下文中一共展示了Result.Catch方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: HandleInvoke
private Yield HandleInvoke(Action<string> activity, Plug plug, string verb, XUri uri, DreamMessage request, Result<DreamMessage> response)
{
Result<IAsyncResult> async;
// remove internal headers
request.Headers.DreamTransport = null;
// set request headers
request.Headers.Host = uri.Host;
if(request.Headers.UserAgent == null) {
request.Headers.UserAgent = "Dream/" + DreamUtil.DreamVersion;
}
// add cookies to request
if(request.HasCookies) {
request.Headers[DreamHeaders.COOKIE] = DreamCookie.RenderCookieHeader(request.Cookies);
}
// initialize request
activity("pre WebRequest.Create");
var httpRequest = (HttpWebRequest)WebRequest.Create(uri.ToUri());
activity("post WebRequest.Create");
httpRequest.Method = verb;
httpRequest.Timeout = System.Threading.Timeout.Infinite;
httpRequest.ReadWriteTimeout = System.Threading.Timeout.Infinite;
// Note (arnec): httpRequest AutoRedirect is disabled because Plug is responsible for it (this allows redirects to follow
// the appropriate handler instead staying stuck in http end point land
httpRequest.AllowAutoRedirect = false;
// Note from http://support.microsoft.com/kb/904262
// The HTTP request is made up of the following parts:
// 1. Sending the request is covered by using the HttpWebRequest.Timeout method.
// 2. Getting the response header is covered by using the HttpWebRequest.Timeout method.
// 3. Reading the body of the response is not covered by using the HttpWebResponse.Timeout method. In ASP.NET 1.1 and in later versions, reading the body of the response
// is covered by using the HttpWebRequest.ReadWriteTimeout method. The HttpWebRequest.ReadWriteTimeout method is used to handle cases where the response headers are
// retrieved in a timely manner but where the reading of the response body times out.
httpRequest.KeepAlive = false;
httpRequest.ProtocolVersion = System.Net.HttpVersion.Version10;
// TODO (steveb): set default proxy
//httpRequest.Proxy = WebProxy.GetDefaultProxy();
//httpRequest.Proxy.Credentials = CredentialCache.DefaultCredentials;
// set credentials
if(plug.Credentials != null) {
httpRequest.Credentials = plug.Credentials;
httpRequest.PreAuthenticate = true;
} else if(!string.IsNullOrEmpty(uri.User) || !string.IsNullOrEmpty(uri.Password)) {
httpRequest.Credentials = new NetworkCredential(uri.User ?? string.Empty, uri.Password ?? string.Empty);
httpRequest.PreAuthenticate = true;
// Note (arnec): this manually adds the basic auth header, so it can authorize
// in a single request without requiring challenge
var authbytes = Encoding.ASCII.GetBytes(string.Concat(uri.User ?? string.Empty, ":", uri.Password ?? string.Empty));
var base64 = Convert.ToBase64String(authbytes);
httpRequest.Headers.Add(DreamHeaders.AUTHORIZATION, "Basic " + base64);
}
// add request headres
foreach(KeyValuePair<string, string> header in request.Headers) {
HttpUtil.AddHeader(httpRequest, header.Key, header.Value);
}
// send message stream
if((request.ContentLength != 0) || (verb == Verb.POST)) {
async = new Result<IAsyncResult>();
try {
activity("pre BeginGetRequestStream");
httpRequest.BeginGetRequestStream(async.Return, null);
activity("post BeginGetRequestStream");
} catch(Exception e) {
activity("pre HandleResponse 1");
if(!HandleResponse(activity, e, null, response)) {
_log.ErrorExceptionMethodCall(e, "[email protected]", verb, uri);
try {
httpRequest.Abort();
} catch { }
}
yield break;
}
activity("pre yield BeginGetRequestStream");
yield return async.Catch();
activity("post yield BeginGetRequestStream");
// send request
Stream outStream;
try {
activity("pre EndGetRequestStream");
outStream = httpRequest.EndGetRequestStream(async.Value);
activity("pre EndGetRequestStream");
} catch(Exception e) {
activity("pre HandleResponse 2");
if(!HandleResponse(activity, e, null, response)) {
_log.ErrorExceptionMethodCall(e, "[email protected]", verb, uri);
try {
httpRequest.Abort();
} catch { }
}
//.........这里部分代码省略.........
示例2: HandleInvoke
//.........这里部分代码省略.........
httpRequest.Credentials = new NetworkCredential(uri.User ?? string.Empty, uri.Password ?? string.Empty);
httpRequest.PreAuthenticate = true;
// Note (arnec): this manually adds the basic auth header, so it can authorize
// in a single request without requiring challenge
var authbytes = Encoding.ASCII.GetBytes(string.Concat(uri.User ?? string.Empty, ":", uri.Password ?? string.Empty));
var base64 = Convert.ToBase64String(authbytes);
httpRequest.Headers.Add(DreamHeaders.AUTHORIZATION, "Basic " + base64);
}
// add request headres
foreach(KeyValuePair<string, string> header in request.Headers) {
HttpUtil.AddHeader(httpRequest, header.Key, header.Value);
}
// send message stream
if((request.ContentLength != 0) || (verb == Verb.POST)) {
async = new Result<IAsyncResult>();
try {
activity("pre BeginGetRequestStream");
httpRequest.BeginGetRequestStream(async.Return, null);
activity("post BeginGetRequestStream");
} catch(Exception e) {
activity("pre HandleResponse 1");
if(!HandleResponse(activity, e, null, response)) {
_log.ErrorExceptionMethodCall(e, "[email protected]", verb, uri);
try {
httpRequest.Abort();
} catch { }
}
yield break;
}
activity("pre yield BeginGetRequestStream");
yield return async.Catch();
activity("post yield BeginGetRequestStream");
// send request
Stream outStream;
try {
activity("pre EndGetRequestStream");
outStream = httpRequest.EndGetRequestStream(async.Value);
activity("pre EndGetRequestStream");
} catch(Exception e) {
activity("pre HandleResponse 2");
if(!HandleResponse(activity, e, null, response)) {
_log.ErrorExceptionMethodCall(e, "[email protected]", verb, uri);
try {
httpRequest.Abort();
} catch { }
}
yield break;
}
// copy data
using(outStream) {
Result<long> res;
activity("pre yield CopyStream");
yield return res = request.ToStream().CopyTo(outStream, request.ContentLength, new Result<long>(TimeSpan.MaxValue)).Catch();
activity("post yield CopyStream");
if(res.HasException) {
activity("pre HandleResponse 3");
if(!HandleResponse(activity, res.Exception, null, response)) {
_log.ErrorExceptionMethodCall(res.Exception, "[email protected]", verb, uri);
try {
httpRequest.Abort();
} catch { }