私はWCFサービスを作成し、IISでホストしました。私はasp.net WebフォームアプリケーションでWeb参照を作成してWCFサービスにアクセスできます。私は、WCF Webサービスに長時間実行されるメソッド(async)を実行させる必要があります。誰もがasp.net WebフォームアプリケーションのボタンのクリックメソッドからWCF非同期メソッドを呼び出す方法の良い例のコードを持っていますか?ASP.NET Webフォーム - 非同期的にWCF非同期メソッドを呼び出す方法
IAsyncResult、EAP、およびTAPを調べました... 現在、ASP.NET WebフォームアプリケーションからWCF非同期メソッドへの非同期呼び出しを行う最良の方法はありますか?
Web参照ではなくサービス参照を使用するようにコードを変更しました。
サービスReceiptFooterService(のServiceContract、OperationsContract、のDataContract):
using System.Collections.Generic;
using System.Net.NetworkInformation;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Threading.Tasks;
namespace ReceiptFooterDeploymentService
{
[ServiceContract]
public interface IReceiptFooterService
{
[OperationContract(Name = "GetRegisterPingResults")]
Task<List<PingReply>> GetRegisterPingResults(List<StoreIP> potentialIPs);
}
[DataContract]
public class StoreIP
{
private int _storeNumber;
private string _ipAddress;
[DataMember]
public int StoreNumber
{
get
{
return _storeNumber;
}
set
{
_storeNumber = value;
}
}
[DataMember]
public string IPAddress
{
get
{
return _ipAddress;
}
set
{
_ipAddress = value;
}
}
}
}
ReceiptFooterServiceクラス:
using System.Collections.Generic;
using System.Linq;
using System.Net.NetworkInformation;
using System.Threading.Tasks;
namespace ReceiptFooterDeploymentService
{
public class ReceiptFooterService : IReceiptFooterService
{
public async Task<List<PingReply>> GetRegisterPingResults(List<StoreIP> potentialIPs)
{
var tasks = potentialIPs.Select(sip => new Ping().SendPingAsync(sip.IPAddress, 1000));
var results = await Task.WhenAll(tasks);
return results.ToList();
}
}
}
ASP.NET Webフォームクライアント:メソッドの唯一の最初の数行(簡潔にするために)
private List<StoreDetail> PingStoreAndUpdateStatus(List<StoreDetail> storeDetails)
{
ReceiptFooterService.StoreIP[] potentialIPs = GetStoreRegisterIps(storeDetails).ToArray();
ReceiptFooterService.ReceiptFooterServiceClient client = new ReceiptFooterService.ReceiptFooterServiceClient();
List<PingReply> pingReplies = client.GetRegisterPingResultsAsync(potentialIPs).Result.ToList();
約2000のIPアドレスをpingしようとしています非同期に再開します。私は成功を示す4つの結果を得ています。しかし、他のPingReplyの詳細のどれもが表示されていません。どのIPアドレスがpingされたのか知る必要があります。
私はどこかで待っていなければなりません...それはすぐに戻ってくるのですか、失敗する原因となるエラーです。任意の提案をいただければ幸いです。 WCFを使用しているとき
'WCF Webサービスで長時間実行されるメソッド(async)を実行する必要があります。 ' - [' async'はブラウザーに制御を渡しません](https://msdn.microsoft.com/en- us/magazine/dn802603.aspx)、それがあなたが考えているものなら。 –
非同期pingの実行が完了したら、ブラウザにサービスをコールバックさせるにはどうすればよいですか? – tgerdes3609
私はSignalRの使用をお勧めします。 –