【问题标题】:How to work with objects using Dynamic WCF?如何使用动态 WCF 处理对象?
【发布时间】:2010-09-20 05:46:18
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    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);
    

    【讨论】:

    • 如果我知道 'YourServiceClient' 是什么类型,这可行。我遇到的问题是当类型从数据库返回时,并且在实例化时不知道。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      相关资源
      最近更新 更多