我已经在本网站上查看过很多讨论的问题,但不要直接回答这个问题。我有以下内容:
在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
和服务实现在同一个程序集和命名空间中时它起作用,但由于某种原因,它在这里不起作用。我怎样才能正确引用它?
答案 0 :(得分:0)
我不确定您为什么要在单独的dll中签订合同和实施?任何具体原因?通常它们将在同一个程序集中,因此在配置文件中您可以轻松地引用它们。解决此问题的一种方法是在运行时创建服务端点,如下所示。
在您的托管项目中,请参阅dll Library.dll
和Implementation.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);
}