从其他项目引用ServiceContract

时间:2013-04-11 01:08:33

标签: wcf visual-studio architecture

我一直在这里和其他地方搜索,所以请原谅任何冗余,但是,我正在尝试做我收集的应该是简单的,并且建议的方式,构建WCF服务。

该场景是一项服务,服务于多个ServiceContracts,每个ServiceContracts都在其自己的项目中。

我开始很简单;在我的解决方案中,我有一个WCF ServiceLibrary和一个类库,只是一个默认的配置文件。

我在解决方案中有另一个名为WCF_Sandbox.Greeting的项目。程序集名称为WCF_Sandbox.Greeting.dll

在该项目中是一个IGreeting类(装饰为ServiceContract)和一个实现类Greeting。

非常努力通过SayHello()服务公开IGreeting WCF_Sandbox方法。

我一直得到

  

"此服务未在......"

实施的服务中列出

错误或错误

  

没有可用的元数据。

如果有人可以建议如何从其他项目中获取服务以显示在WCF_Sandbox服务中,我将不胜感激。这似乎是很多人都在努力解决的一个基本问题,我无法在任何地方以直截了当的方式回答这个问题。非常感谢!

app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
  <service name="WCF_Sandbox.Service1">
    <host>
      <baseAddresses>
        <add baseAddress = "http://localhost:8733/Design_Time_Addresses/WCF_Sandbox/Service1/" />
      </baseAddresses>
    </host>
    <endpoint address="" binding="basicHttpBinding" contract="WCF_Sandbox.IService1">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>

2 个答案:

答案 0 :(得分:0)

正如@Tim所提到的,代码可能很有用。

我建议采取以下步骤:

1)。确保项目参考(@Tim建议) - 我认为你已经做过了

2)。可能是我错了,但如果您的服务合同是IGreeting,那么端点应该包含IGreeting而不是Service1,看起来像

  

... endpoint address =“”binding =“basicHttpBinding”   合同= “WCF_Sandbox。的 IGreeting

3)。确保合同属性具有完全限定的接口名称(即完整命名空间+接口名称)。

4)。尝试使用WCF配置工具(可从Visual studio tools-&gt;菜单获得)手动选择合同,然后查看配置文件。

答案 1 :(得分:0)

我想我理解你想要完成的事情 - 你想通过图书馆将服务与其他代码分开 - 这一切都很好,但我认为你有一些基本的误解。我不确定你的整体体验水平是什么,所以请原谅我,如果我说的是你已经知道或理解的东西。

首先,库不是可执行代码。使用库(我知道)的唯一方法是让执行程序使用它。它们提供了一种在多个应用程序之间共享代码的方法,而无需多个源代码副本。在WCF术语中,它是一种将合同与托管应用程序分开的方法。

所以在你的情况下,听起来你已经创建了库(顺便说一句,WCF服务库 是一个类库 - 它只是一个不同的项目模板,可以帮助你开始运行与WCF)。

接下来需要做的是托管服务。您可以通过IIS,Windows服务或自托管应用程序执行此操作。例如,如果要在IIS中托管服务,则可以将包含服务的库(DLL)放在计划托管服务的虚拟目录/应用程序的bin文件夹中。然后,您将在虚拟目录/应用程序的根目录中为该服务添加* .svc文件,并将ServiceModel部分从默认的app.config文件复制到web.config文件。

要使用该服务,您可以通过Visual Studio添加服务引用(在将使用该服务的项目中),也可以通过SvcUtil生成代理并将其包含在客户端项目中。

简而言之,如果我正确理解您的设置,那么您就在那里。您只需要托管服务,然后编写一个客户端来使用它。

这里有很多我没有涉及的事情 - 这只是我认为你想要做的事情的一种方式。

我强烈建议您浏览微软的Getting Started Tutorial - 特别是关于托管和创建客户端的部分。

我希望这可以解决你的一些困惑--WCF在许多不同的选择和风格中都很棒,但它也有一个陡峭的学习曲线。