Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从WCF服务向网站发送数据_C#_Jquery_Asp.net Mvc_Wcf_Error Handling - Fatal编程技术网

C# 从WCF服务向网站发送数据

C# 从WCF服务向网站发送数据,c#,jquery,asp.net-mvc,wcf,error-handling,C#,Jquery,Asp.net Mvc,Wcf,Error Handling,我有以下设置 使用 作为后端的ASP.NET MVC网站,它(通过NET.tcp或NET.pipe)连接到 管理并连接到的自托管WCF服务 大量高延迟外部服务 因此,当客户端按下一个按钮时,一个请求被发送到MVC,MVC将其路由到WCF,WCF从外部服务聚合它,一切都很好 我似乎无法理解的问题是另一种方式的沟通,即当一个外部服务离线时,通知客户端(浏览器)的最简单、最优雅的方式是什么 这意味着服务应该以某种方式通知mvc站点,mvc站点应该以某种方式通知客户端外部服务处于脱机状态 此外:外部

我有以下设置

  • 使用
  • 作为后端的ASP.NET MVC网站,它(通过NET.tcp或NET.pipe)连接到
  • 管理并连接到的自托管WCF服务
  • 大量高延迟外部服务
因此,当客户端按下一个按钮时,一个请求被发送到MVC,MVC将其路由到WCF,WCF从外部服务聚合它,一切都很好

我似乎无法理解的问题是另一种方式的沟通,即当一个外部服务离线时,通知客户端(浏览器)的最简单、最优雅的方式是什么

这意味着服务应该以某种方式通知mvc站点,mvc站点应该以某种方式通知客户端外部服务处于脱机状态


此外:外部服务将具有高可用性,因此很少使用“脱机”场景,因此我正在寻找一种不进行服务器大量轮询的解决方案。

您可以使用它将异常数据返回到客户端

我更喜欢在返回的合同上有一个
issusccessful
标志,并且只在出现严重错误时抛出错误异常

下面是带有
issusccessful
标志的响应契约的一个非常基本的示例

[DataContract]
public class MyResponse
{
    [DataMember]
    public bool IsSuccessful { get { return Message == null || !Messages.Any(); } set { } }
    [DataMember]
    public List<string> Messages { get; set; }
}
[DataContract]
公共类MyResponse
{
[数据成员]
public bool issusccessful{get{return Message==null | | |!Messages.Any();}set{}
[数据成员]
公共列表消息{get;set;}
}

如果需要提供更详细的信息,则消息可以是复杂类型
DataContract
DataMember
属性可以是
MessageContract
MessageBodyMember
,如果这更适合您的体系结构。

WCF和浏览器的典型场景是请求/响应模式。浏览器发出请求,服务响应


您可以让浏览器定期轮询服务以查找状态。

在我看来,您需要在轮询服务中实现某种类型,以ping这些外部服务的可用性。

中有允许WCF服务发送发现消息的功能。如果您有计划的停机,则该服务具有发布有关脱机/联机消息的方法


要为用户设置自定义消息,您需要侦听这些公告消息。实现这一点的类是。它有用于处理事件和消息的事件。

我正在使用类似的体系结构,并计划使用它将更新从WCF(有时直接,有时通过Azure Service Bus)推送到单页jQuery驱动的应用程序。不过,我还没有实现这个功能,所以可能有一些问题我还没有考虑

从他们的文档中:

将数据从服务器推送到客户端(不仅仅是浏览器客户端) 这一直是个棘手的问题。信号器使它变得非常容易和简单 为你处理所有的重物


斯科特·汉斯勒曼(Scott Hansleman)在这方面有一个很好的博客:

简单的Json不是更容易吗?对不起,我可能没有说清楚这个问题。没有来自客户端的请求,服务器应该启动通信。外部服务将具有高可用性,因此很少使用“脱机”场景,因此我正在寻找一种不进行服务器大量轮询的解决方案。在这种情况下,当外部服务脱机且浏览器发出请求时,只需返回一个故障。该故障已在WCF服务级别上实现,并且在客户端请求时可用。问题是,现在我需要以事件驱动的方式将其发送到客户端。客户端是什么?这是基于网络的吗?是的,我在问题中已经描述过。你如何定义“离线”?暂时无法到达?是否由外部服务的管理员关闭以进行维护?这是严格用于处理“计划”停机,还是您希望优雅地处理无法联系远程服务的问题?@RickLiddle“goes dark”可能是一个更好的词。基本上,当外部服务(不在我的命令范围内)没有响应时,我强烈推荐JcFx.Upvoted提供的signer建议,这是一个非常好的解决方案,它为手头的问题提供了可行的答案,并包含大量资源。依我看,这就是解决StackOverflow问题的模式。