来自其他项目的合同比界面不可见

时间:2011-09-02 08:18:30

标签: .net wcf

当我向项目添加wcf服务时,我可以在Add Service Reference下看到它。 但是在将接口移动到另一个项目之后,但是相同的命名空间并在接口的合同中键入了正确的引用 - 我无法在Add Service Reference下看到我的服务。

为什么呢?我在配置文件中遗漏了什么?

Service Config文件应该在带有接口或合同的项目中吗?

修改。

第一个项目

using System.ServiceModel;
namespace Project.ServiceModel
{
    [ServiceContract]
    public interface ITest
    {
        [OperationContract]
        void DoWork();
    }
}

第二个项目

using Project.ServiceModel;

namespace Project.Service
{
    public class Test : ITest
    {
        public void DoWork()
        {
        }
    }
}

Test class项目中的配置

<system.serviceModel>
<services>
  <service name="Project.Service.Test">
    <endpoint address="http://localhost:8732/Test/" binding="wsHttpBinding"
      contract="Project.ServiceModel.ITest">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8732/LMTService/" />
      </baseAddresses>
    </host>
  </service>
</services>
</system.serviceModel>

1 个答案:

答案 0 :(得分:2)

编辑contract="Project.ServiceModel.ITest"以引用完全限定名称(包括程序集名称,而不仅仅是名称空间)。与contract="Project.ServiceModel.ITest, Project.ServiceModel"类似,假设您的项目名称为Project.ServiceModel,并且程序集名称设置为与项目名称相同(默认情况下通常是这样)。

也许这是一个错字,但你的mex地址看起来不正确。应该是http://localhost:8732/Test/mex。它仍然可能适用于您当前的配置,但您违反惯例。