标签: workflow-foundation-4

在Azure上的Localhost上使用WCF

总结
如何在Azure上的IIS中托管时如何在localhost上访问WCF服务?Azure不会将localhost或127.0.0.1绑定到我的网站.

详细信息
我在Azure上托管了一个ASP.Net应用程序.我添加了一个.svc和一些我想通过WCF使用的工作流程.为了简单起见,我的网络应用程序只是在localhost上调用服务,所以我在web.config中有这样的端点;

<client>
  <endpoint address="http://localhost:8080/Router.svc/Case" binding="basicHttpBinding" contract="NewOrbit.ExVerifier.Model.Workflow.Case.ICaseWorkflow" name="Case" />
  <endpoint address="http://localhost:8080/Workflow/Case/Case_default1.xamlx" binding="basicHttpBinding" contract="*" name="Case_default1" />
</client>
Run Code Online (Sandbox Code Playgroud)

这在我的本地机器上工作得很好.问题是,当我将此发布到Azure时,IIS中的网站不会绑定到localhost,而是绑定始终是服务器的实际IP地址.它最终在applicationHost.config中看起来像这样:

<bindings>
   <binding protocol="http" bindingInformation="10.61.90.44:80:" />
   <binding protocol="https" bindingInformation="10.61.90.44:443:" />
   <binding protocol="http" bindingInformation="10.61.90.44:8081:" />
</bindings>
Run Code Online (Sandbox Code Playgroud)

因此,只要我的Web应用程序尝试在localhost(或127.0.0.1)上调用该服务,它就会立即失败.不用说,如果我转到服务器并更改绑定,那么一切都很好.

我发现很奇怪的是,有很多例子,人们在Azure上的localhost上访问WCF服务,所以我无法弄清楚为什么会这样.我已经将osFamily设置为2并且为了调试这个我启用了Web发布和远程桌面访问,我认为理论上可能会搞砸了.

我已经看过了什么

  • 我可以在运行时重写代码中的端点地址,用localhost代替实际地址,或者如Ron在答案中所描述的那样动态创建端点.不幸的是我正在使用WCF路由服务,因此我可以对工作流进行版本控制.这意味着我的代码调用路由器端点,而WCF路由器依次使用web.config中指定的端点调用实际的服务/工作流.我没有控制路由服务端点解析,我认为,编写一整套路由逻辑,当我想要的只是调用localhost时,这似乎是很多工作.
  • 切换到使用命名管道; 唉,它会导致工作流程出现一些奇怪的问题,可能是由于双工,而且我处于截止日期,所以没有时间在那一刻到达底层.

wcf azure workflow-foundation-4

8
推荐指数
1
解决办法
2747
查看次数

WF代码活动的单元测试

我已经创建了编码活动,现在我想对它进行单元测试,但我不知道如何.任何例子将不胜感激.

我的简单例子如下.

  public sealed class ParameterActivity : CodeActivity
{
    public InArgument<int> Argument1 { get; set; }
    public InArgument<int> Argument2 { get; set; }
    public OutArgument<int> Result { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
        var a = context.GetValue(Argument1);
        var b = context.GetValue(Argument2);

        context.SetValue(Result, a + b);
    }
}
Run Code Online (Sandbox Code Playgroud)

unit-testing workflow-foundation-4

8
推荐指数
1
解决办法
6793
查看次数

HandleError与ProvideFault工作流服务不一致,如何处理?

在我们的WF4工作流服务中,我们尽量保持健壮.我们做的一件事就是在HandleError和ProvideFault(IErrorhandler)中记录错误.文档清楚地说明HandleError是进行日志记录的正确位置,但我发现有些奇怪的事情发生了:

  1. 我看到一些错误只触发ProvideFault,但从来没有HandleError,一个例子是:

    System.NullReferenceException:未将对象引用设置为对象的实例.在System.ServiceModel.Activities.Dispatcher.DurableInstanceManager.GetInstanceAsyncResult.GetInstance()at System.ServiceModel.Activities.Dispatcher.DurableInstanceManager.GetInstanceAsyncResult..ctor

  2. 还有一些错误只触发HandleError,但从不提供ProvideFault,一个例子是:

    System.ServiceModel.CommunicationException:从管道读取错误:管道已结束.(109,0x6d).在System.ServiceModel.Channels.PipeConnection.Read(Byte []缓冲区,Int32偏移量,Int32大小,TimeSpan超时)处于System.ServiceModel.Channels.SessionConnectionReader.Receive(TimeSpan超时)

  3. 最后有错误触发两者,首先是ProvideFault,然后是HandleError(在后台线程上)

  4. 如果可能的话,我也想记录相应的传入消息.我使用OperationContext.Current.RequestContext.RequestMessage.ToString()执行此操作这通常只适用于ProvideFault,在HandleError中我们不再有RequestContext

所以我的结论是,要记录所有错误,我必须登录这两种方法.但由于3 ..这导致了大量重复的日志条目.

我目前的解决方法是"记住"来自ProvideFault的最后一个记录的异常,如果相同的异常进入HandleError则忽略它.看起来不是很干净.

有没有人能够更好,更可靠地记录WF服务中可能发生的所有错误?

请不要指向使用HandleError或ProvideFault中的IErrorHandler在WCF中记录异常?因为这没有提供任何帮助.

wcf workflow-foundation-4

8
推荐指数
1
解决办法
674
查看次数

如何查询工作流实例的执行状态

我创建了一个工作流程,我通过WorkflowInstance.Run()运行它.这个工作流程有很多书签,我希望能够查询哪个书签负责当前的空闲状态.

我怎么能这样做?

谢谢

c# workflow workflow-foundation workflow-foundation-4

7
推荐指数
1
解决办法
2015
查看次数

Workflow Foundation 4.0中的设计时验证模式是什么?

我不清楚何时以及如何在WF 4.0中的自定义活动/自定义活动工厂/自定义设计器中进行验证.

我的活动中唯一似乎提供验证错误支持的地方是在CacheMetadata方法中(我相信在设计过程中会多次调用它).这是我应该进行验证的地方吗?ActivityDesigner中是否支持验证?

validation designer workflow-foundation-4

7
推荐指数
1
解决办法
1701
查看次数

在WF4中使用Send或SendReceive活动时,如何模拟对WCF服务的调用?

因此,作为我的工作流程的一部分,我需要调用外部WCF服务来检索一些对象.问题是我无法看到如何模拟将由send活动调用的WCF服务.有谁知道我怎么做到这一点?

谢谢,约翰

workflow mocking workflow-foundation workflow-foundation-4

7
推荐指数
1
解决办法
477
查看次数

视觉跟踪/监控工作流程(WF)4.0

我打算使用WF 4.0ASP.NET 4.0中构建自定义Web应用程序,用户希望能够自己修改工作流程,为此我们将使用用户可以使用的WPF客户端,我们将进行工作流重新托管,有很多博客和指导可供选择.

但我不确定如何满足用户想要查看/跟踪工作流的可视化表示(图表/图像)的一个要求,描述哪些阶段结束,当前阶段是什么等.这需要在一个网页.可能与描绘状态的图标相同的工作流程.这类似于SharePoint 2010中Visio工作流可用的视觉效果.甚至AgilePoint工作流也提供了这样的视图.

类似的问题在这里,但它的WinForms/WPF我想.我需要这个用于ASP.NET.

有任何想法吗?

asp.net .net-4.0 asp.net-4.0 workflow-foundation-4 agilepoint

7
推荐指数
1
解决办法
3154
查看次数

Azure中的Windows Workflow

我正在构建一个将在Azure上运行工作流的应用程序.

我已经看到构建演示文稿 使用Workflow构建应用程序和Azure - BUILD 2011,它讨论了当前的功能,以及未来可能实现的功能.讨论的一件事是称为"Azure工作流服务",据我所知,计划在2012年进行预览.但是,我还没有找到更多有关它的信息.

此外,Windows Azure AppFabric中还有一个早期演示文稿Workflow,其中讨论了有关Azure中工作流的更多信息,重点介绍了Windows Azure AppFabric CTP.本演示文稿中讨论了许多很酷的功能,但我不确定这些功能是否可用,如果没有,可用时.

所以有两个问题:

如果我今天需要构建应用程序,那么在Azure上实现工作流的建议方法是什么?

如果应用程序不需要在一年之后完成,那么在Azure上实现工作流的建议方法是什么?

workflow azure workflow-foundation-4 azure-appfabric

7
推荐指数
1
解决办法
5299
查看次数

基于Web的设计器用于Windows工作流基础

除了基于WPF的重新设计的设计器之外,还有基于HTML/HTML5的Windows Workflow Foundation工作流设计器吗?

问候普拉萨德

workflow-foundation workflow-foundation-4

7
推荐指数
1
解决办法
2934
查看次数

Windows工作流基础中基于人的任务

我试图在Windows工作流基础4.5中构建一个简单的请假申请,它会在工作流尝试完成而不等待approveRequest活动时抛出以下异常.

具有相同ServiceContractName和OperationName'ApplyLeave'的两个SendParameters对象具有不同的参数名称.

你能告诉我缺少什么吗?

using System;
using System.ServiceModel.Activities;
using System.Activities;
using System.ServiceModel;
using System.Activities.Statements;

namespace DemoWF
{
    public class _25_LeaveRequest
    {
        public WorkflowService GetInstance()
        {
            WorkflowService service;
            Variable<int> empID = new Variable<int> { Name = "empID" };
            Variable<int> requestID = new Variable<int> { Name = "requestID" };

        Receive receiveLeaveRequest = new Receive
        {
            ServiceContractName = "ILeaveRequestService",
            OperationName = "ApplyLeave",
            CanCreateInstance = true,
            Content = new ReceiveParametersContent
            {
                Parameters ={
                    {"empID",new OutArgument<int>(empID)}
                }
            }
        };

        SendReply replyLeaveRequestID = new SendReply
        {
            Request …
Run Code Online (Sandbox Code Playgroud)

c# workflow-foundation workflow-foundation-4

7
推荐指数
1
解决办法
366
查看次数