でHttpWebrequestを使用した不安定な動作の解決現在、短縮URLの拡張を行うSQL Server 2008 udfを実装しようとしています。私たちは、主要なURL短縮サービスのほとんどに対して非常にうまく機能しています。しかし、一見無作為な時間に「ハング」し、特定のドメイン(例えばbit.ly)に対して動作することを拒否し、他のサービス(例えばtinyurl.com)への後続の呼び出しは引き続き成功します。SQL 2008 CLR UDF
これは、URL短縮サービスプロバイダによって何らかのブロックが行われたためだと思っていましたが、dbserverサービスを停止して再起動すると、後続のリクエストが成功する原因になります。 SQLサーバーが何らかの形で発信HTTP接続を何らかの形でプールしているのでしょうか?
はここ
using System;
using System.Data;
using System.Net;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString UrlExpander(string url)
{
// Set up the Webrequest
HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(url);
try
{
// Set autoredirect off so the redirected URL will not be loaded
wr.AllowAutoRedirect = false;
// Get the response
HttpWebResponse wresp = (HttpWebResponse)wr.GetResponse();
return new SqlString(wresp.Headers["Location"].ToString());
}
catch (Exception ex)
{
wr.Abort();
throw ex;
}
}
};
問題には関係しませんが、catch(Exception ex)は使用しないでください。代わりに、単にfinallyブロックの中にwr.Abort()を置いてください。 –
ええ、それはほとんどの場合に当てはまりますが、この特定のUDFの性質を考慮すると、例外はTSQLレベルにバブリングする必要はありません。上記のコードの再暴行は、それがサーバーの復旧に役立つかどうかを確認するための実験的なものでした。私たちの考えでは、どちらかが動作するか、nullを返します。ありがとう。 – dan90266