如何使用动态WCF处理对象?

时间:2008-10-31 17:46:29

标签: .net wcf web-services .net-3.5

我们目前使用WCF开发了一个应用程序。我们的客户端连接到位于服务器上的不同WCF服务主机,servicehosts从客户端所需的DB返回数据。标准型号。但是,此当前设计在app.config文件中包含客户端和servicehost端的所有WCF数据。我们希望使其更具动态性,并将所有数据(包括端点,合同和绑定)移动到数据库中。

现在的问题是我们如何检索这些数据并正确访问它。我们已经让设计在配置文件中有一个已定义的端点,并使用该端点,我们可以调用它来获取我们需要的其余端点信息(即所有绑定,合同和它过去在app.config中定义的不同端点。客户端和servicehost端都是这种情况。

我现在正在努力解决的问题是如何针对这些动态端点进行编码?当客户端调用servicehost时,它不仅要对servicehost进行简单调用,还要检索并传回servicehost对象,以便根据需要进行处理。例如,在表单加载时,我们可以从DB中检索具有所有当前定义的设置的对象,然后用户对fornm执行任何操作,然后我们将更新的对象传递回servicehost。我们现在可以这样做,因为在Visual Studio 2008中我们添加了所有服务引用,这些引用自动生成了可以从servicehosts调用和检索的方法和对象。如果我们转到动态端点连接,我们如何在开发阶段获取这些数据?

我过去在使用.NET远程处理的.NET 2.0中开发了类似的应用程序,我们在这里传来来回传递对象,客户端和服务器都使用相同的对象定义类来了解对象。我不确定如何使用WCF进行此操作。

2 个答案:

答案 0 :(得分:0)

您不必依赖app.config文件来配置服务,您可以在运行时配置服务,例如获取来自数据库的绑定,端点或行为以配置servicehost对象。

但是,服务,数据或消息合同应该在解决方案或Web引用中进行编码,否则会通过大量使用反射和大量复杂性来降低性能,从而实现整个动态功能。

在您的方案中,我想可以通过其他方式完成,例如处理通用消息。实现处理请求中任何消息数据的逻辑。 希望您可以通过阅读有关如何处理来自客户端和服务器的“任何”消息的文章来获得更多想法。

http://msdn.microsoft.com/en-us/library/aa395208.aspx

答案 1 :(得分:0)

定义绑定,然后使用它来实例化客户端。

BasicHttpBinding basic = new BasicHttpBinding(
       BasicHttpSecurityMode.TransportCredentialOnly);
basic.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
EndpointAddress serviceAddress = new EndpointAddress(
       "http://whatever/service.svc");
YourServiceClient m_client = new YourServiceClient(basic, serviceAddress);