我使用對web服務的調用來喚醒處理某些圖像的進程。 該過程需要10分鐘,所以我不希望asp.net客戶端等待。當您對響應不感興趣時,使用異步調用webservice
我所做的只是一個簡單的異步調用服務來啓動處理。
但它看起來像ConvertToCubeService服務不打擾啓動。 ConvertToCubeService是一個工作流服務。我從另一個工作流服務的活動中調用它。 我確信代碼會將異步調用傳遞給ConvertToCubeService。
public sealed class CallProcessingAsync : CodeActivity
{
// Define an activity input argument of type string
public InArgument<string> EquirectangularImagePath { get; set; }
public InArgument<string> SaveImageDirectoryPath { get; set; }
public InArgument<string> ImageName { get; set; }
// If your activity returns a value, derive from CodeActivity<TResult>
// and return the value from the Execute method.
protected override void Execute(CodeActivityContext context)
{
// Obtain the runtime value of the Text input argument
ConvertToCubeService.ServiceClient client = new ConvertToCubeService.ServiceClient();
ConvertToCubeService.ConvertToCubeFaces param = new ConvertToCubeService.ConvertToCubeFaces();
var apPath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
param.EquirectangularFilePath=apPath+context.GetValue(this.EquirectangularImagePath);
param.imageName = context.GetValue(this.ImageName);
param.SaveCubicFacesDirectory = apPath + context.GetValue(this.SaveImageDirectoryPath);
client.ConvertToCubeFacesCompleted += new EventHandler<ConvertToCubeService.ConvertToCubeFacesCompletedEventArgs>(client_ConvertToCubeFacesCompleted);
client.ConvertToCubeFacesAsync(param);//call async the server to do the work
using (var db = new panonestEntities())
{
var p = db.Panoramas.Where(x => x.ImageName.Equals(param.imageName)).First();
p.Status = "Called processing. wait";
db.SaveChanges();
}
}
void client_ConvertToCubeFacesCompleted(object sender, ConvertToCubeService.ConvertToCubeFacesCompletedEventArgs e)
{
using (var db = new panonestEntities())
{
}
}
}
實際上,Web服務器是作爲Windows工作流服務實現的。所以我認爲它做了類似的事情。但問題是,我打電話的異步方法和服務不啓動.. – Ryan
嘿,這是有道理的。您可能想要提供有關如何嘗試啓動該服務的信息。 – BNL
我添加了使Async調用 – Ryan