C#客户端 怎么知道wcf服务 已关闭

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#客户端 怎么知道wcf服务 已关闭相关的知识,希望对你有一定的参考价值。

如题,求高手解决

参考技术A 这个看服务端有错误消息没有有的话可以根据服务端的错误消息判断,没有的话只能按照监测情况(断定服务链接不到)追问

怎么看 服务端有不有错误消息?
如果服务端的主机以外关闭,能不能收到错误消息

参考技术B 做个方法调用服务,得到的结果不是你想要的,那就是服务器关闭或者出错的时候

WCF的替代品[关闭]

【中文标题】WCF的替代品[关闭]【英文标题】:Alternatives to WCF [closed] 【发布时间】:2010-11-18 17:52:04 【问题描述】:

我目前正在使用 WCF 实现一个 Silverlight 应用程序,用于客户端和服务器之间的通信。我听说使用 WCF,我们必然会在客户端使用一些 Microsoft 技术,并且不能轻易地将其替换为“任何东西”——至少使用 WPF 的默认 SOAP 实现。

所以我的问题是:

这是真的吗? Restful WCF 服务怎么样?我描绘了一个普通的 REST 实现,任何客户端都可以通过 REST 与这个服务器端通信。是的?不? 有哪些(好的)替代方案可以替代 WCF?我为什么要这样做?

【问题讨论】:

【参考方案1】:

我是维护ServiceStack 的核心团队的一员 - 一个成熟的 WCF 开源替代方案:现代、代码优先、模型驱动、WCF 替代 Web 服务框架 encouraging code and remote best-practices 用于创建简洁、干燥、@ 987654323@.

它自动支持 JSON、JSONP、CORS 标头以及 form-urlencoded/multipart-formdata。在线演示是一个很好的开始,因为它们都使用 Ajax。

此外,没有 XML 配置或代码生成,您的“一次性编写”C# Web 服务提供所有开箱即用启用的 JSON, XML, SOAP, JSV, CSV, HTML 端点,并自动使用挂钩插入您自己的 @987654326 @如果需要。

它还包括generic sync/async service clients,提供了一个快速、有类型的客户端/服务器端对端通信网关。

这是创建简单 Web 服务所需的所有代码的完整示例,无需任何配置即可自动注册并在所有 web data formats on pre-defined and custom REST-ful routes 上提供:

public class Hello : IReturn<HelloResponse> 

    public string Name  get; set; 


public class HelloResponse 

    public string Result  get; set; 


public class HelloService : Service 

    public object Get(Hello request)
    
        return new HelloResponse  Result = "Hello, " + request.Name ;
    

可以在 C# 中调用以上服务(无需任何构建步骤/代码生成),使用以下行:

HelloResponse response = client.Get(new Hello  Name = "World!" );
response.Result.Print(); // => Hello, World

在 jQuery 中使用:

$.getJSON('hello/World!', function(r) 
    alert(r.Result); 
);

【讨论】:

您已经将其称为“开源”。这看起来像是一个商业产品(即使你免费提供“精简”版本)。Github 中是否有源代码? 这是“Openware”,代码本身是开源的,但如果不支付“专业版”就很难使用。例如,本教程需要安装付费的 Visual Studio 扩展。 @Daniel ServiceStackVS VS.NET 扩展是免费使用的,它安装了最新版本的 ServiceStack v4,可以在 free quotas 中免费使用。 ServiceStack 的 BSD/免费 v3 的所有文档都可以在以下位置获得:github.com/servicestackv3/servicestackv3/wiki @mythz 所以 v4 不是开源的。也许你应该修改这个答案。 @Daniel v4 在 OSS AGPL/FOSS Exception 和适用于闭源/商业项目的商业许可证下获得双重许可。【参考方案2】:

我听说使用 WCF 我们会绑定 使用一些 Microsoft 技术 客户端

好吧,那你被骗了!

许多供应商和开源库都支持 SOAP - 这是 W3C 标准,而不是 Microsoft 特定的想法。

RESTful 服务的一个很好的替代方案是 ASP.NET MVC,我发现了一种将方法直接公开为 URL 的非常简单的方法。

【讨论】:

哦,好吧 - 那是件好事。我知道 SOAP 不是特定于 MS 的,所以我真的不明白为什么带有 SOAP 的 WCF 会将我们绑定到 Microsoft。谢谢你把它清理干净!而且创建WCF服务的时候默认使用SOAP吧? 从名称“ASP .NET MVC”听起来像是您通常在 ASP .NET 应用程序中使用的东西。当然 - 我的 Silverlight 是用 ASP 封装的,但它会像适合 ASP 应用程序一样适合我的 Silverlight 应用程序吗? 不,是的;)。您必须明确指定绑定。所以 - 你必须选择,因此,“默认”这个词不适合这里,另一方面,你不必在某个地方打开任何魔法选项,这是你的选择。 @bambushka - 您应用的 Silverlight 部分在客户端运行。您是否正在想办法让其他地方的客户直接连接到该应用程序?我认为不会(无论如何它基本上不会工作。)任何类型的可联系 Web 服务都必须在服务器上运行。因此,根据定义,我们不是在谈论与 Silverlight 直接相关的任何事情。我们正在谈论服务器端。这就是您使用 ASP.NET MVC 的地方。这只是一种非常简单的方法来创建一个可以通过 HTTP 返回数据的自定义服务器;您只需编写一两个方法,然后让它们返回 JSON 或其他什么。 否 - 什么都不会连接到 Silverlight 客户端。是的 - 对这个问题感兴趣的是服务器端。哦,我明白了。但是您在服务器端没有任何 ASP - 这个名称是不是有点令人困惑?将研究 ASP .NET MVC。谢谢!【参考方案3】:

WCF 基于 SOAP(默认情况下 - 也支持 REST)并且可以轻松地与任何能够理解和使用 SOAP 的客户端进行互操作。

其中包括 Java、PHP 等语言和系统。

WCF 是 Microsoft 的实现 - 但标准都是国际和可互操作的标准。标准中没有任何内容是 Mircosoft 特有的。

马克

【讨论】:

每个人都说 WCF 不会将我绑定到 Microsoft :-) 很高兴听到 - 显然我被错误地告知了......谢谢! 虽然“纸上谈兵”在现实中听起来非常好,但互操作性仍然存在许多小而烦人的问题...... 请详细说明“小而烦人的互操作性问题”。否则,你和那些告诉 OP WCF 会将他绑定到 Microsoft 的人一样糟糕。【参考方案4】:

WCF 为您提供了一个抽象层次,让您了解您现在/想要的交流方式。因此,您可以选择 Microsoft 特定的绑定,但也可以使用 SOAP 协议,或者两者都使用,这样非 Microsoft 客户端将能够通过 fe 进行通信。 SOAP 等客户端可以使用更健壮的方式。 至于 REST,你可能想看看 Hanselman 在 NDC here 上的演讲。它可能不会直接回答您的问题,但可能会为您指出一些问题。 至于替代方案,除了 Web 服务之外,我看不到任何可以在 .NET 上运行的东西(但是,因为 WCF 为您提供了所有这些以及更多功能,我宁愿将其视为一种较旧的方式,而不是真正的替代方案)。

【讨论】:

谢谢!将查看 Hanselman 的演讲(正确链接:media01.smartcom.no/microsite/asx.aspx?eventid=4499)。好吧 - 如果 WCF 没有将我绑定到 Microsoft,我会很高兴。不过我会考虑改用 REST。我觉得现在这通常比 SOAP 更受欢迎——但我可能错了吗? 现在REST比较流行。 SOAP 对于大多数应用程序来说是多余的。 XML 无论如何都不适合表示分层数据。 SOAP/WSDL 是一个非常混乱的标准,它结合了 XML Schema 标准(它结合了来自 Unicode 联盟的正则表达式标准)。与这一切相比,REST 几乎什么都不是,基本上只是 HTTP。并且比基本 SOAP 更强大(例如,您可以将图像作为二进制流返回)。 我在这个领域没有足够的能力来回答这个问题,但我知道 Hanselman 在那里提到的一件事 - 这些技术非常适合客户端应用程序等,但有时,整个想法获取(通常)二进制数据并将它们作为文本放在括号内可能会产生过多的开销。在 WCF 中,我喜欢这样一个事实,即我可以编写一次逻辑(合约的实现),然后使用多种方式轻松访问它们。 @Ravadre - 你有那个 Hanselman 评论的链接吗?我要说的一点是,HTTP 本身可以返回二进制而不需要将其编码为文本,因此,如果您(例如)想要返回 PDF 或 JPEG 或 ZIP 下载作为该方法的结果,您可以这样做, 通过返回 ContentResult 或 FileResult 等。看看派生自 msdn.microsoft.com/en-us/library/… 的类 - 因此,如果您只想返回一个内容流作为结果,它是零编码工作并且实现最佳。 @Earwicker - 你是对的,这个“评论”实际上是视频末尾的答案,我评论的重点是(我认为 - 也是 Hanselman 的),使用这些格式像 JSON 一样会产生开销,因此它并不总是使用它们的最佳方式(即返回大量数据时)。我的最后一条评论可能不准确(主要是因为它必须很短;))-我并没有忽略可能性,我只是指出,使用“文本”协议(soap,json)返回数据很容易方便(fe. 便于用 js 解析),但并不总是实现目标的最佳方式。【参考方案5】:

对于 java - wcf 互操作性检查 Sun 的 Project Tango link

【讨论】:

链接已断开

以上是关于C#客户端 怎么知道wcf服务 已关闭的主要内容,如果未能解决你的问题,请参考以下文章

WCF客户端可以关闭与服务的链接吗,让软件也可以照常运用,现有的只有打包好的软件和配置文件

如何使用 WCF 在 C# 中调试 localhost 客户端/服务

自定义 WCF 绑定等效于 WSHttpBinding 且 WS-Addressing 已关闭

c# WCF 可以像socket那样监听吗?

WCF的替代品[关闭]

在 WCF 服务 C# 的服务器端获取客户端的 Mac 地址不重复(在 WCF 3.0 中获取客户端 IP 地址)