技术中的wcf是什么意思?

技术中的wcf是什么意思?,第1张

Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。

整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。

是Windows平台上开发分布式应用最佳的实践方式。

简单的归结为四大部分:

1、网络服务的协议,即用什么网络协议开放客户端接入。

2、业务服务的协议,即声明服务提供哪些业务。

3、数据类型声明,即对客户端与服务器端通信的数据部分进行一致化。

4、传输安全性相关的定义。

wcf客户端:

对于 WCF 的客户端来说,WCF 服务就像是一个 Web Service 一样,在 Visual Studio 2008 中,所有 WCF 服务的连接都是由客户端的 服务代理(WCF Service Proxy) 来运行,开发人员不用花费太多心思在通信上,而 WCF Service Proxy 在 Visual Studio 中被称为服务引用(Service Reference)。

在 Visual Studio 中加入 WCF 的服务引用时,Visual Studio 会自动帮开发人员做掉一些必要工作(例如组态创建以及产生 Service Proxy 等),开发人员只需要在代码中取用 WCF Service Proxy 对象即可。

可以使用以下任意一种方式登录服务器:

远程桌面连接(MicrosoftTerminalServicesClient,MSTSC):采用这种方式登录,请确保实例能访问公网。如果在创建实例时没有购买带宽,则不能使用远程桌面连接。

管理终端VNC:无论您在创建实例时是否购买了带宽,只要您本地有网页浏览器,都可以通过管理控制台的管理终端登录实例。

使用远程桌面连接(MSTSC)登录实例

打开开始菜单>远程桌面连接,或在开始菜单>搜索中输入mstsc。也可以使用快捷键Win+R来启动运行窗口,输入mstsc后回车启动远程桌面连接。

在远程桌面连接对话框中,输入实例的公网IP地址。单击显示选项。

输入用户名,如小鸟云默认为niaoyun。单击允许我保存凭据,然后单击连接。这样以后登录就不需要手动输入密码了。

大多数,如果不是所有的异常可以看出,在WCF轨迹(配置轨迹)和微量最好使用服务轨迹查看器查看。 这不是你应该已经跑了一整天在生产,但它有助于排除故障反正。 此外,请注意,oneways可能不会作为一个真正运行的逗射后不理地视SessionMode如果您有您的服务配置为SessionMode.Allowed甚至SessionMode.Required,该单向操作将运行 CodeGo.net,如果它不是单向的所有(这个可以观察oneways超过坦率地说,不过,我不知道这是否改变了异常,你可以得到的类型,或者当你让他们,但是,在任何情况下,你应该得到一个异常,如果该请求不能送的。AFAIK,该单向逗结束地时,enqued在服务器端,所以有地方(WCF相关的)异常在那之前(序列化/反序列化记)。 那么,这样的相关异常见过最好的(甚至是IErrorHandler接口并没有让他们都因时,它被称为在请求/响应流量的事实)使用轨迹/ traceviewer。

2. 如何处理故障的官方是在这里: 处理异常和 故障 了解状态 变化 与主网页是在信道模型概述 有一个很好的状态示出的事情是如何发生的:

3. 异常情况将发生故障的代理。你不能AFAIK做很多有关:不异常-P 我有点惊讶的是单向还是个问题,但对于吞咽属升,有学分: 是你扔的故障看或异常看它很重要(而且应该是逗错误地) 作为一个hacker,你可以启用调试-但是请关闭此服务! 你在逗使用地的服务对象看我刚刚在博客上这个确切的主题...基本上,你的逗使用地可吞异常。 3个选项: 唐的逗使用地 子类的代理和重写的Dispose() 把它包,按照该博客

4. 通常情况下,WCF服务承载在ServiceHost中,如果WCF的服务失败,那么唯一的选择就是killWCF服务,并开始一个新的。 在ServiceHost有一个事件触发器逗断块地的时候,WCF服务失败时被激活:

ServiceHost host = new ServiceHost(new Service.MyService())

host.Faulted += new EventHandler(host_faulted)

host.Open()

这是可能得到异常的故障,但它需要多一点的工作:

public class ErrorHandler : IErrorHandler

{

public void ProvideFault(Exception error, MessageVersion version, ref Message fault)

{

}

public bool HandleError(Exception error)

{

Console.WriteLine("exception")

return false

}

}

public class ErrorServiceBehavior : IServiceBehavior

{

public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)

{

}

public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, Collection<ServiceEndpoint>endpoints, BindingParameterCollection bindingParameters)

{

}

public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)

{

ErrorHandler handler = new ErrorHandler()

foreach (ChannelDispatcher dispatcher in serviceHostBase.ChannelDispatchers)

{

dispatcher.ErrorHandlers.Add(handler)

}

}

}

ServiceHost host = new ServiceHost(new Service.MyService())

host.Faulted += new EventHandler(host_faulted)

host.Description.Behaviors.Add(new ErrorServiceBehavior())

host.Open()

积分

5. 大约2)... 诀窍在于,你逗使用地,应始终在抛出异常的代理调用Abort()。文章WCF疑难杂症解释这一切。 服务类的文章,它包装服务调用者的启发。这是从我的项目的示例代码:

ServiceHelper<CodeListServiceClient, CodeListService.CodeListService>.Use(

proxy =>seasonCodeBindingSource.DataSource = proxy.GetSeasonCodes(brandID)

)

这是ServiceHelper的代码,从文章略加修改。到目前为止,它已经真的很好。

using System

using System.ServiceModel

namespace Sportina.EnterpriseSystem.Client.Framework.Helpers

{

public delegate void UseServiceDelegate<TServiceProxy>(TServiceProxy proxy)

public static class ServiceHelper<TServiceClient, TServiceInterface>where TServiceClient : ClientBase<TServiceInterface>, new() where TServiceInterface : class

{

public static void Use(UseServiceDelegate<TServiceClient>codeBlock)

{

TServiceClient proxy = null

bool success = false

try

{

proxy = new TServiceClient()

codeBlock(proxy)

proxy.Close()

success = true

}

catch (Exception ex)

{

Common.Logger.Log.Fatal("Service error: " + ex)

throw

}

finally

{

if (!success &&proxy != null)

proxy.Abort()

}

}

}

}

6. 我有一个问题,即通道仍然处于故障状态的异常之后。这将服务于任何后续连接被渲染。 从故障状态恢复服务的修复是处理通道发生故障的事件:

channelFactory = new ChannelFactory<IService>(endpoint)

channelFactory.Faulted += OnChannelFaulted

var channel = channelFactory.CreateChannel()

然后定义OnChannelFaulted:

void OnChannelFaulted(object sender, EventArgs e)

{

channelFactory.Abort()

}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/181304.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-28
下一篇2023-03-28

发表评论

登录后才能评论

评论列表(0条)

    保存