如何在运行时在我的 winform UI 中添加 wcf 服务。我创建了一个 wcf 服务,它返回托管机器的运行进程。我想在我的 winform 应用程序中添加托管机器服务。
问问题
3198 次
3 回答
2
您需要在运行时动态更改端点,因此您需要WCF Discovery。
结构 :
WCF Consumer(s) <---> WCF Discovery Service <---> WCF Service(s)
执行 :
拓扑:
- 启动发现服务 [ 结构 BackBone ]
- 启动服务 [每个服务都将向发现服务宣布其启动]
- 启动客户端 [每个客户端都会从发现服务中发现(查找和解决)服务的端点]
备注:
- 发现过程使用UDP(检查您的防火墙,它可以阻止连接)
- 服务必须宣布它们的启动,因此自托管服务是可以的,但IIS 托管的 5/6 服务不是因为它们在第一次调用发生时自动启动!
解决 IIS 托管的 5/6 问题:
这样您就可以手动启动 IIS-Hosted 5/6 服务而无需第一次调用
您还可以使用WCF 路由服务。
兄弟提示:
不要为无服务器(No-BackBone、No-BootleNeck、完全分布式等)理想拓扑走得太远,这会让你大吃一惊,让你发疯:D
对于初学者,我建议您阅读本教程 [ WCF 教程]
于 2012-06-04T00:55:21.253 回答
1
不知道你想在这里做什么。但是你需要知道两件事来调用 WCF 服务 1) 服务契约 2) 端点。现在没有逃避服务合同,因为您需要知道您可以使用的所有操作。但是,在 WCF 4 中,有一个称为 WCF 发现的新功能,它可以帮助您动态确定终点,即在运行时。请参阅以下链接http://msdn.microsoft.com/en-us/library/dd456791.aspx
于 2012-06-03T22:26:57.857 回答
0
如果我正确理解您的问题,您需要一些代码来在运行时添加服务,而无需使用 *.config 文件和 *.svc 文件中的任何配置。
请参阅该示例:
Uri baseAddress = new Uri("http://localhost:8080/hello");
// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
// Enable metadata publishing.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
// Open the ServiceHost to start listening for messages. Since
// no endpoints are explicitly configured, the runtime will create
// one endpoint per base address for each service contract implemented
// by the service.
host.Open();
Console.WriteLine("The service is ready at {0}", baseAddress);
Console.WriteLine("Press <Enter> to stop the service.");
Console.ReadLine();
// Close the ServiceHost.
host.Close();
}
它在控制台应用程序中创建自托管服务。
http://msdn.microsoft.com/en-us/library/ms731758.aspx
那是你问的吗?
于 2012-06-04T01:17:48.610 回答