WCF发现.NET 4:配置/以编程方式定义的问题
||
我有启用发现功能的WCF服务,现在我想将客户端连接到它。
问题:当我使用udp端点(1.)并尝试以编程方式发现该服务时,它可以正常工作...当我使用App.config方法(2)时,它没有起作用(错误:未发现端点)。
在我看来,这两种解决方案的“ udp发现结果”应该是相同的,但不幸的是,事实并非如此……
1.以编程方式(工作):
码:
DiscoveryClient discClient = new DiscoveryClient(\"udpDiscoveryEndpoint\");
FindCriteria fCriteria = new FindCriteria(typeof(IAlarmServer));
fCriteria.Duration = TimeSpan.FromSeconds(5);
fCriteria.MaxResults = 1;
FindResponse fResponse = discClient.Find(fCriteria);
EndpointAddress address = fResponse.Endpoints[0].Address;
Console.WriteLine(\"Address found: \" + address.ToString());
配置:
<system.serviceModel>
<client>
<endpoint name=\"udpDiscoveryEndpoint\" kind=\"udpDiscoveryEndpoint\" />
</client>
</system.serviceModel>
2.使用App.config和“集成到端点”方法(不起作用!):
码:
var Proxy = new AlarmServerClient(\"IAlarmServer\"); // Default client generated by Visual Studio
Proxy.SomeMethod(); // throw no endpoints discovered exception
配置:
<standardEndpoints>
<dynamicEndpoint>
<standardEndpoint name=\"discoveryDynamicEndpointConfiguration\">
<discoveryClientSettings>
<findCriteria duration=\"00:00:05\" maxResults=\"1\">
<types>
<add name=\"AlarmServiceRef.IAlarmServer\"/>
</types>
</findCriteria>
<endpoint kind=\"udpDiscoveryEndpoint\"/>
</discoveryClientSettings>
</standardEndpoint>
</dynamicEndpoint>
</standardEndpoints>
配置:
<client>
<endpoint binding=\"basicHttpBinding\" bindingConfiguration=\"DefaultBasicHttpBinding\" contract=\"AlarmServiceRef.IAlarmServer\" name=\"IAlarmServer\"
kind=\"dynamicEndpoint\"
endpointConfiguration=\"discoveryDynamicEndpointConfiguration\"/>
</client>
任何想法为什么会这样?
没有找到相关结果
已邀请:
2 个回复
漂截嘘
还要确保将发现行为添加到服务中 服务配置
由于我希望客户端能够通过类型(WcfDiscovery.Contracts.IAlarmServer)发现服务,因此我还必须在端点(eb1)的行为配置中指定该服务 服务配置
现在,在客户端,我可以使用findCriteria发现服务。请注意,查找条件中的类型必须与服务发出的类型匹配(在服务类型列表中) 客户端配置
这是客户端端点配置 客户端配置
最后,我可以在这样的控制台应用程序中发现该服务:
希望这可以帮助!
勺的驴吓识