私はAzureにWCF RESTサービスをたくさん用意しています。いくつかのWCFサービスの中で、私は外部サービスにHttpリクエスト(Eメール/ SMSを送信する)を要求します。 第三者サービスへのhttp要求は、重要ではないです。私はそれがクライアントの呼び出しに対する私の応答を妨げないようにしたい。この場合に使用するパターンについてのガイダンスが必要です。これは私のwcfサービス内のパターンを忘れるためのものです。WCFサービス内から発砲して忘れる
WCFサービスのための擬似コード
[WebInvoke(UriTemplate = "process", Method = "POST")]
[OperationContract]
public bool DoSomeProcessing(DataEntity data)
{
bool result = ProcessData(data);
//I do not want this call to block
SendSMS();
}
//Call to third party
public void SendSMS()
{
HttpWebRequest objWebRequest = null;
HttpWebResponse objWebResponse = null;
objWebRequest = (HttpWebRequest)WebRequest.Create(url);
objWebRequest.Method = "GET";
//I do not want to wait for this response since often the web requests takes a bit of time.
//objWebResponse = (HttpWebResponse)objWebRequest.GetResponse();
}
すべての私のWCFサービスインスタンスコンテキストモードはPerCallに設定されています。
InstanceContextMode = InstanceContextMode.PerCall
電子メールとSMSを送信するサービスがいくつかあります。 SMSの復帰までこれらのサービスをブロックしたくありません。
私は文学にまで読んで、3つの方法が
火を立って、ThreadPool.QueueUserWorkItemを使用して忘れて - 私は、スレッドの数にいくつかの制限を見ていますとすべての私のWCF呼び出しがある場合PerCallはQueueUserWorkItemう安全ですか?
SendSMS機能に対してonewayオプションが有効になっている別のWCF RESTサービスを用意しています(これは、ハッキングのように見えますが)。
- EndInvokeをなし
使用BeginInvokeを
最後に、私が行方不明です何Azureの特定があります。正しい方向のポインタがあれば分かるはずです。