当前位置:首页 » 委托授权 » 代理发现服务

代理发现服务

发布时间: 2021-07-22 00:05:12

① 如何利用”发现代理”实现可用服务的实时维护

一、发现代理与Managed发现模式
至于发现服务如何进行可用服务的实时维护,则是具体实现上的选择问题。不过WS-Discovery通过目标服务的通知机制来解决发现代理维护的服务的实时可用性。具体来说就是赋予了发现代理监听服务上下线通知的能力,并根据接收到的通知来进行可用服务的动态注册和注销。不过与Ad-Hoc模式下采用广播模式的通知不同,在Managed模式下,目标服务只需要专门针对发现代理发送通知就可以了。
在Ad-Hoc模式下,我们采用UdpAnnouncementEndpoint实现了广播式的通知,而在Managed模式则直接使用AnnouncementEndpoint终结点进行单播式的通知。该终结点的地址就是发现代理的地址。同理,在Ad-Hoc模式下我们进行广播式服务探测和解析是通过UdpDiscoveryEndpoint终结点来进行的,在Managed模式下我们可以直接使用DiscoveryEndpoint终结点实现客户端向发现代理单方面的可用服务的探测和解析请求。
发现代理部仅仅局限于Managed模式,同样可以使用在Ad-Hoc模式下。在Ad-Hoc模式下,发现代理可以像目标服务一样监听来自客户端发出的广播式的Probe/Resolve请求,也可以像客户端一样监听来自服务端发出的广播式的Helle/Bye通知。所以UdpDiscoveryEndpoint和UdpAnnouncementEndpoint同样可以应用在发现代理上。
发现代理本质上就是一个服务,它的核心功能就是接收客户端发送的针对可用服务探测和解析的Probe/Resolve请求,并回复以相应的PM和RM消息。至于上面提到的对目标服务上/下线通知监听能力只是具体实现对可用服务维护的一种方式而已。
二、通过继承DiscoveryProxy创建发现代理
发现服务本质上就是一个WCF服务,并且这个服务实现的服务契约定义的操作应该基于定义在WS-Discovery中的几种基本的消息交换:Probe/PM、Resolve/RM和Hello/Bye。交换的消息在针对不同版本的WS-Discovery(WSDiscoveryApril2005、WSDiscovery11和WSDiscoveryCD1)又具有不同的要求。即使针对某个具体版本的WS-Discovery,Probe/PM和Resolve/RM的消息也会因采用Ad-Hoc或者Managed模式又有所不同。如果你需要创建一个同时支持不同版本WS-Discovery的发现代理服务,就应该实现DiscoveryEndpoint和AnnouncementEndpoint终结点所实现的所有服务契约。
所以说要自己从头到尾去定义这么一个发现代理服务并不是一件容易的事情。为了使开发人员可以无需关注具体的消息交换的细节,帮助他们容易的定义发现代理,WCF提供了一个抽象类DiscoveryProxy。我们只需要将我们自定义的发现代理服务类型继承该类并且重写相应的方法就可以了。
下面的代码给出了DiscoveryProxy的核心方法的定义。正如我们上面的分析,作为一个完备的发现代理服务应该实现DiscoveryEndpoint和AnnouncementEndpoint终结点所实现的所有服务契约,在这里得到了证实。DiscoveryProxy定义了4组抽象的OnBegingXxx/OnEndXxx方法,分别针四个基本的服务发现操作(消息交换):服务探测(Probe/PM)、服务解析(Resolve/RM)、上线通知(Hello)和离线通知(Bye)。作为继承自DiscoveryProxy的自定义发现代理服务,只需要重写这些抽象方法既可。
1: public abstract class DiscoveryProxy :
2: ,
3: IAnnouncementContract11,
4: IAnnouncementContractCD1,
5: ,
6: ,
7: IDiscoveryContractApril2005,
8: IDiscoveryContractAdhoc11,
9: IDiscoveryContractManaged11,
10: IDiscoveryContractAdhocCD1,
11: IDiscoveryContractManagedCD1, ...
12: {
13: //Find(Probe)
14: protected abstract IAsyncResult OnBeginFind(FindRequestContext findRequestContext, AsyncCallback callback, object state);
15: protected abstract void OnEndFind(IAsyncResult result);
16:
17: //Resolve
18: protected abstract IAsyncResult OnBeginResolve(ResolveCriteria resolveCriteria, AsyncCallback callback, object state);
19: protected abstract EndpointDiscoveryMetadata OnEndResolve(IAsyncResult result);
20:
21: //Online Announcement(Hello)
22: protected abstract IAsyncResult OnBeginOnlineAnnouncement(DiscoveryMessageSequence messageSequence, EndpointDiscoveryMetadata
23: endpointDiscoveryMetadata, AsyncCallback callback, object state);
24: protected abstract void OnEndOnlineAnnouncement(IAsyncResult result);
25:
26: //Offline Announcement(Bye)
27: protected abstract IAsyncResult OnBeginOfflineAnnouncement(DiscoveryMessageSequence messageSequence, EndpointDiscoveryMetadata
28: endpointDiscoveryMetadata, AsyncCallback callback, object state);
29: protected abstract void OnEndOfflineAnnouncement(IAsyncResult result);
30:
31: //其他成员
32: }

三、实例演示:自定义发现代理服务
接下来我们将通过一个简单的实例演示如何自定义发现代理服务,以及如何利用这个发现代理构建一个基于Managed模式的服务发现环境以实现服务的自动注册和服务的动态调用。实例解决方法依然采用之前的结构,并且直接使用定义好的CalculatorService作为目标服务。
步骤一、创建自定义发现代理服务
我们首先通过继承DiscoveryProxy创建一个自定义的发现代理服务,我们将它起名为DiscoveryProxyService。由于我们要重写的方法都是异步模式的,OnBeginXxx的输出和OnEndXxx的输入都是一个IAsyncResult类型的对象,所以我们先要定义一个实现IAsyncResult接口的类型。为了简单起见,我们在Servie项目中定义的如下一个最为简单的DiscoveryAsyncResult(其实它根本起不到异步执行的目的)。
1: using System;
2: using System.ServiceModel.Discovery;
3: using System.Threading;
4: namespace Artech.WcfServices.Service
5: {
6: public class DiscoveryAsyncResult : IAsyncResult
7: {
8: public object AsyncState { get; private set; }
9: public WaitHandle AsyncWaitHandle { get; private set; }
10: public bool CompletedSynchronously { get; private set; }
11: public bool IsCompleted { get; private set; }
12: public EndpointDiscoveryMetadata Endpoint { get; private set; }
13:
14: public DiscoveryAsyncResult(AsyncCallback callback, object asyncState)
15: {
16: this.AsyncState = asyncState;
17: this.AsyncWaitHandle = new ManualResetEvent(true);
18: this.CompletedSynchronously = this.IsCompleted = true;
19: if (callback != null)
20: {
21: callback(this);
22: }
23: }
24: public DiscoveryAsyncResult(AsyncCallback callback, object asyncState,
25: EndpointDiscoveryMetadata Endpoint)
26: : this(callback, asyncState)
27: {
28: this.Endpoint = Endpoint;
29: }
30: }
31: }

我们来创建我们自定义如下一个发现代理服务DiscoveryProxyService,我们通过在类型上应用ServiceBehaviorAttribute特性将DiscoveryProxyService定义成一个单例服务,并且支持并发。
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.ServiceModel;
5: using System.ServiceModel.Discovery;
6: namespace Artech.WcfServices.Service
7: {
8: [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,ConcurrencyMode = ConcurrencyMode.Multiple)]
9: public class DiscoveryProxyService : DiscoveryProxy
10: {
11: public IDictionary<EndpointAddress, EndpointDiscoveryMetadata> Endpoints { get; private set; }
12: public DiscoveryProxyService()
13: {
14: this.Endpoints = new Dictionary<EndpointAddress, EndpointDiscoveryMetadata>();
15: }
16:
17: //Find(Probe)
18: protected override IAsyncResult OnBeginFind(FindRequestContext findRequestContext, AsyncCallback callback, object state)
19: {
20: var endpoints = from item in this.Endpoints
21: where findRequestContext.Criteria.IsMatch(item.Value)
22: select item.Value;
23: foreach (var endppint in endpoints)
24: {
25: findRequestContext.AddMatchingEndpoint(endppint);
26: }
27: return new DiscoveryAsyncResult(callback, state);
28: }
29: protected override void OnEndFind(IAsyncResult result) {}
30:
31: //Resolve
32: protected override IAsyncResult OnBeginResolve(ResolveCriteria resolveCriteria, AsyncCallback callback, object state)
33: {
34: EndpointDiscoveryMetadata endpoint = null;
35: if (this.Endpoints.ContainsKey(resolveCriteria.Address))
36: {
37: endpoint = this.Endpoints[resolveCriteria.Address];
38: }
39: return new DiscoveryAsyncResult(callback, endpoint);
40: }
41: protected override EndpointDiscoveryMetadata OnEndResolve(IAsyncResult result)
42: {
43: return ((DiscoveryAsyncResult)result).Endpoint;
44: }
45:
46: //OnlineAnnouncement
47: protected override IAsyncResult OnBeginOnlineAnnouncement(DiscoveryMessageSequence messageSequence, EndpointDiscoveryMetadata
48: endpointDiscoveryMetadata, AsyncCallback callback, object state)
49: {
50: this.Endpoints[endpointDiscoveryMetadata.Address] = endpointDiscoveryMetadata;
51: return new DiscoveryAsyncResult(callback, state);
52: }
53: protected override void OnEndOnlineAnnouncement(IAsyncResult result) {}
54:
55: //OfflineAnnouncement
56: protected override IAsyncResult OnBeginOfflineAnnouncement(DiscoveryMessageSequence messageSequence, EndpointDiscoveryMetadata
57: endpointDiscoveryMetadata, AsyncCallback callback, object state)
58: {
59: if (this.Endpoints.ContainsKey(endpointDiscoveryMetadata.Address))
60: {
61: this.Endpoints.Remove(endpointDiscoveryMetadata.Address);
62: }
63: return new DiscoveryAsyncResult(callback, state);
64: }
65: protected override void OnEndOfflineAnnouncement(IAsyncResult result) {}
66: }
67: }

DiscoveryProxyService具有个IDictionary<EndpointAddress, EndpointDiscoveryMetadata>类型的属性Endpoints表述可用的目标服务列表。在处理服务上线通知的OnBeginOnlineAnnouncemen/OnEndOnlineAnnouncement方法中讲代表上线服务的EndpointDiscoveryMetadata添加到Endpoints列表中。而在处理服务离线通知的OnBeginOfflineAnnouncement/OnEndOfflineAnnouncement方法中则将代表离线服务的EndpointDiscoveryMetadata从Endpoints列表中移除。
而处理客户端服务探测请求的OnBeginFind/OnEndFind方法中,从传入的FindRequestContext中获得代表匹配条件的FindCriteria对象,并通过它从Endpoints列表中找到匹配的EndpointDiscoveryMetadata,最终通过调用的AddMatchingEndpoint方法将它们添加到FindRequestContext之中。至于用于处理服务解析请求的OnBeginResolve/ OnEndResolve则只需要从Endpoints列表中将与给定的终结点地址一致的EndpointDiscoveryMetadata返回就可以了。
步骤二、寄宿发现代理服务和目标服务
现在我们需要寄宿上面创建的自定义发现代理服务DiscoveryProxyService和代表目标服务的CalculatorService,我们把所有的设置都定义在如下的配置中。

② 代理服务器问题

第一类代理,那是因为代理服务器仅作中转作用.或者是你没有成功使用代理.所以没不到隐藏IP的作用.
第二类代理,其代理转出IP是动态的,明显的如ADSL,分配给你的IP是动态的,你可能今天在广州,明天就在北京.是正常的.

你的目的是隐藏自己的IP而不被人追踪到.
你需要寻找比较专业的代理服务器,例如付费的,或者国外的.相对而言比一些个人的小型代理要专业的多.

简单来说,随便拿个网吧弄个ccproxy就可以作代理了.但不定因素很多.还是找专业的代理吧.或者多层代理.至于多层代理,非一般IT菜鸟所用.不作详解,我也不太懂,呵呵.

③ 代理服务器是什么什么意思

(Proxy)是网络信息的中转站,比方说HTTP代理服务器。我们使用网络浏览器直接链回接其他Internet站点并取得网络信息时答,需送出Request信号来得到回答,然后对方再把信息传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你。
而且大部分代理服务器都具有缓冲功能,就好像一个大Cache,它不断将新取得的数据保存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。

④ 代理自动发现服务无法关闭。

管理工具-服务

闲得无聊,来看看

⑤ winHTTP Web 代理自动发现服务是干什么的

实现 Windows HTTP 服务(WinHTTP)的 Web 代理自动发现服务(WPAD)。WPAD 是用于启用 HTTP 客户端自动发现代理配置的协议。如果此服务被停用或禁用,WPAD 协议将在 HTTP 客户端的进程中执行,而不是在外部服务进程;因此不会造成功能损失。

⑥ sip用户代理服务器之间如何相互发现

查找代理和重定向服务器的位置方法:

1.DNS

2.手工配置

3.TFTP的option 66

⑦ 通过代理服务器上网会被网管发现吗

先攻击网管的机子,整死他,他就只能忙着修机器哦。。

⑧ winhttp web代理自动发现服务是什么意思

实现 Windows HTTP 服务(WinHTTP)的 Web 代理自抄动发袭现服务(WPAD)。WPAD 是用于启用 HTTP 客户端自动发现代理配置的协议。如果此服务被停用或禁用,WPAD 协议将在 HTTP 客户端的进程中执行,而不是在外部服务进程;因此不会造成功能损失。

⑨ 代理自动发现服务怎么关闭

运行MSCONFIG.EXE 找到auto discovery service 然后禁止就行了

热点内容
重百超市供应商系统 发布:2021-11-27 07:59:12 浏览:259
成都瓦尔塔蓄电池经销商 发布:2021-11-27 07:59:09 浏览:828
宁波办公用品供应商 发布:2021-11-27 07:59:05 浏览:753
广州人人店经销商 发布:2021-11-27 07:59:03 浏览:49
旺旺上海经销商 发布:2021-11-27 07:58:59 浏览:362
三折门上海经销商 发布:2021-11-27 07:58:20 浏览:207
澳洲保健品代理商 发布:2021-11-27 07:58:17 浏览:728
木旯代理商 发布:2021-11-27 07:58:15 浏览:464
供应商开发年度总结 发布:2021-11-27 07:58:07 浏览:578
汤臣钙片代理人是谁 发布:2021-11-27 07:56:27 浏览:433