问题标签 [wcf-behaviour]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4695 浏览

wcf - 如何同步调用 WCF 服务

我有一个 WCF 服务,我正在使用 VS 2010 中的“添加服务引用”创建客户端。

问题是服务被异步调用,尽管“生成异步操作”选项未选中。在此处输入图像描述

那么我怎样才能同步调用服务呢?这种行为在哪里定义(在客户端或服务器上)?我是 WCF 的新手。请多多指教

客户端是一个控制台应用程序。

我没有选中“生成异步操作”。即使这样,代理也包含以下几行,表明该方法是异步调用的。不知道为什么:)

0 投票
0 回答
531 浏览

wcf - 如何以编程方式读取 WCF 路由器上的当前筛选表

我们有一个现有的 wcf 路由器,其配置如下:

我们希望能够查询路由器以询问“给定请求,您将路由到哪个端点?”

有没有办法通过 API 以编程方式执行路由?例如,通过将返回端点名称的路由方法运行请求

0 投票
1 回答
2613 浏览

wcf - SoapUI 得到响应,但没有 .Net 客户端

我正在尝试从 .net 客户端访问 https Java webservice,但总是以“504 Gateway Timeout”异常结束。

我可以使用 SoapUI 从同一个 Web 服务获得响应。

我还注意到 SoapUI 和 .net 客户端的请求肥皂消息并不相似。我的问题是,错误的消息格式是否会导致“504 网关超时”问题?如果是的话,我如何修改.net 客户端中的soap 消息?

这是两个不同的应用程序生成的请求肥皂消息:

肥皂界面

.NET 客户端

0 投票
2 回答
2710 浏览

wcf - 如何为 IIS 托管的 WCF 服务上的所有操作添加 OperationBehavior?

我有一个自定义的 OperationBehavior。我想一次将它应用于所有操作。不幸的是,不能为整个服务或 web.config 配置 OperationBehaviors。

在测试应用程序中托管 WCF 服务时,我可以执行以下操作:

但是如何在 IIS 托管的 Web 应用程序中执行此操作?

我试图进入OperationContext.Current.Host.Description.EndpointsApplication_Start但在任何操作开始之前当然OperationContext.Current不可用,所以我的方法失败了。

0 投票
1 回答
487 浏览

wcf - 如果输入具有所需属性的空节点,则返回 WCF 捕获错误

我创建了一个使用 Unity/Unity.WCF/Unity.Interceptors 进行故障处理的 WCF 服务。

现在,如果我执行 SOAP 请求并且不在请求中包含所需的节点 - 服务方法执行 - 我抛出异常并且我的拦截器将其变成 SOAP 错误。

例子:

我可以使用调试器单步执行服务调用 - 在验证请求对象时抛出异常,并且我的拦截器将其变成 SOAP 错误:

现在 - 我们的测试人员为所需参数提供了一个空节点,如下所示:

并且该服务返回以下错误消息:

问题是 - 这个请求永远不会到达我的服务,所以我不能对这个错误消息做任何事情。我如何影响这里发生的事情?

这让我想起了 MVC 中的一些模型绑定——我可以影响绑定行为吗?

0 投票
1 回答
1242 浏览

wcf - 在集线器之外获取 SignalR 用户(Hub.Context)

有没有办法在集线器之外获取当前的 signalR 请求用户?我可以在集线器方法中使用 Hub.Context.User,但是如果集线器方法调用任何其他底层?Wcf 服务调用 - 一个额外的 BehaviorExtensionElement 用于添加带有当前用户身份名称的 wcf 消息头。

是的,我发现 DefaultHubManager 获取了集线器,但我不确定它将是当前请求的集线器,而不是并发请求或新请求集线器,因为在 ResolveHub 结束时,我看到以下代码运行

Obviuosly 我可以将用户从集线器方法传递到 wcf 调用,但它需要重构以从 wcf 行为移动到使用用户名显式设置请求字段。我也可以依靠 HttpContext.Current 从 cookie 中获取信息吗?

0 投票
0 回答
349 浏览

wcf-behaviour - 为什么我以编程方式添加的 FaultContract 无法识别?

我试图让我的 WCF 服务总是抛出详细的错误,即使没有明确抛出它们。为了实现它,我实现了:

  • 一个 ErrorHandler,其 IErrorHandler.ProvideFault 将非故障错误包装为 FaultException

  • ServiceBehavior 扩展,附加此处理程序并向每个操作添加此 FaultException 的故障描述,因此客户端可能会这样捕获它。

我用错误处理程序属性修饰了我的服务(最初我有两个不同的 IServiceBehavior 实现,分别用于 ErrorHandler 和 Operation.Faults)。

我还确保新的 FaultDescription 中的数据集与我在合同上定义 FaultContract 时检查的数据集相同。

无论我尝试什么,在我的合同上使用 FaultContract 作为属性时,客户端都会正确捕获错误,但是当在运行时通过 ApplyDispatchBehavior 附加它时,只会捕获一般的 FaultException。显然,其他一切(错误包装和抛出)都在工作,只有在运行时向每个操作添加 FaultContract 失败。

请帮忙...

这是代码:

错误处理.cs


GeneralServerFault.cs


IContractService.cs


合同服务.cs

我省略了客户端和主机的代码

0 投票
1 回答
1078 浏览

c# - 使用 ClientBase 调用 wcf 服务时如何设置端点行为名称

我在数据库中有客户端端点,而不是在 web.config 中。我正在使用具有多个构造函数的 ClientBase,我可以在其中传递绑定、地址等,并且可以调用客户端 wcf 服务。我在 web.config 中定义了绑定配置和行为配置。我可以在使用 ClientBase 时传递这些名称。但是我没有找到该类的任何属性或构造函数,我可以在其中传递已在 web.config 中定义的 EndpointBehavior 名称。我可以看到我可以添加 IEndpointBehavior 实例,但我不想使用它,而是更喜欢只传递在 web.config 中定义的端点行为名称。

任何帮助,将不胜感激。

谢谢。

0 投票
2 回答
471 浏览

json - WCF json错误处理程序导致异常

我在端点中配置了两种行为:

  1. 一种是 json 序列化,它与这里的示例基本非常相似。重要的是以下几点:
  1. 另一个用于错误处理。这样当抛出异常时,将向客户端发送一条 json 格式的消息。代码取自此处(答案以:“这是基于上面的一些信息的完整解决方案:”)。

当我只使用行为 1 时,一切正常。当我添加第二个行为时,我得到以下异常:

{"ExceptionType":"System.InvalidOperationException","Message":"传入的消息具有意外的消息格式 'Raw'。操作的预期消息格式是 'Xml'、'Json'。这可能是因为 WebContentTypeMapper尚未在绑定上配置。有关详细信息,请参阅 WebContentTypeMapper 的文档。"}

这是我的 web.config 的样子:

有任何想法吗?

0 投票
1 回答
2027 浏览

json - BizTalk WCF-WebHttp 发送端口的 WCF 行为扩展未填充日期 Http 标头

我有一个 BizTalk 2013 应用程序(不是 R2),需要将 Json 文档发送到外部供应商的 RESTful api。供应商需要三个 Http 标头:

  1. 内容类型:应用程序/json

  2. 日期:ISO8601 UTC 格式

  3. 授权:自定义身份验证。使用包含上述日期值的构造字符串通过 HMACSHA1 哈希运行

在 BizTalk 中,我的出站 (xml) 消息发送到发送端口,有一个自定义管道组件使用 JSON.Net 转换为 Json。到目前为止,一切都很好。为了添加每条消息唯一的标头,我创建了一个实现 IClientInspector 和 IEndpointBehavior 的 WCF 行为扩展。在 BeforeSendRequest() 中,我获得了对请求的 HttpRequestMessageProperty 的引用。

我可以成功地将 ContentType 标头和 Authorization 标头添加到 Headers Collection。我无法添加 Date 标头 - 没有错误,只是在使用 Fiddler 检查时没有标头值。

我在某处读到 Date 是一个受限制的标题,对于一种解决方法,我可以使用 Reflection 来解决它。例如

那也没有用。我真的很困惑: 1. 为什么我的请求中根本没有 Date 标头?2.如果有一个,我怎么能操纵它,因为我需要给它是“限制的”?

我尝试了两种不同的选择: WCF 行为扩展:

和发送管道中的自定义管道组件

在任何一种情况下,我都可以设置 Content-Type、授权和测试日期 - tweDate 只是为了测试,但我不能设置实际的 Date 标头。