配置WCF,其中ServiceContract和服务实现位于单独的程序集中

时间:2015-09-02 20:08:04

标签: c# wcf namespaces app-config wcf-endpoint

我已经在本网站上查看过很多讨论的问题,但不要直接回答这个问题。我有以下内容:

Library.dll

namespace LibraryNamespace
{
    [ServiceContract]
    public interface IService
    {
        [OperationContract]
        void Operation();
    }
}

Implementation.dll

namespace ImplementationNamespace
{
    public class ServiceImplementation : IService
    {
        public void Operation()
        {
            // Do Something
        }
    }
}

app.config

<service name="ImplementationNamespace.ServiceImplementation">
    <endpoint 
        address="ServiceImplementation" 
        binding="netTcpBinding" 
        contract="LibraryNamespace.IService" />
    ....
</service>

我一直警告contract="LibraryNamespace.IService"。程序运行,但我有一种感觉,这个警告引起了我更多的问题。

  

&#39;合同&#39;属性无效 - 值   &#39; LibraryNamespace.IService&#39;根据其数据类型无效   &#39; serviceContractType&#39; - 枚举约束失败。

ServiceContract和服务实现在同一个程序集和命名空间中时它起作用,但由于某种原因,它在这里不起作用。我怎样才能正确引用它?

1 个答案:

答案 0 :(得分:0)

我不确定您为什么要在单独的dll中签订合同和实施?任何具体原因?通常它们将在同一个程序集中,因此在配置文件中您可以轻松地引用它们。解决此问题的一种方法是在运行时创建服务端点,如下所示。

在您的托管项目中,请参阅dll Library.dllImplementation.dll,并使用以下代码添加端点

using LibraryNamespace;
using ImplementationNamespace;

// Specify a base address for the service
String baseAddress = "http://localhost/ServiceImplementation";

// Create the tcp binding
NetTcpBindings tcp = new NetTcpBindings();

// Define service and Create the endpoint
 using(ServiceHost host = new ServiceHost(typeof(ServiceImplementation)))
 {
  host.AddServiceEndpoint(typeof(IService),tcp, baseAddress);
 }