0

我整天在这里和其他地方搜索,所以请原谅任何冗余,但是,我正在尝试做我收集到的应该是简单的、推荐的方式来构建 WCF 服务。

该场景是一个服务,为多个 ServiceContract 提供服务,每个 ServiceContract 在它自己的项目中。

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

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

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

真的很难获得通过服务公开的SayHello()方法。IGreetingWCF_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>
4

2 回答 2

0

我想我理解你想要完成的事情——你想通过库将服务与其他代码分开——这一切都很好,但我认为你有一些基本的误解。我不确定您的整体经验水平如何,所以如果我说的任何内容您已经知道或理解,请原谅我。

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

因此,在您的情况下,听起来您已经创建了库(顺便说一下,WCF 服务库一个类库 - 它只是一个不同的项目模板,可以让您启动并运行 WCF)。

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

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

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

有很多事情我没有在这里介绍 - 这只是我认为你正在尝试做的事情的一种方式。

我强烈建议阅读微软的入门教程——尤其是关于托管和创建客户端的部分。

我希望这可以消除您的一些困惑 - WCF 有许多不同的选项和风格,非常棒,但它也可能有一个陡峭的学习曲线。

于 2013-04-12T06:22:33.443 回答
0

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

我建议以下步骤:

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

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

...端点地址=""绑定="basicHttpBinding"合同=" WCF_Sandbox.IGreeting "

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

4)。尝试使用 WCF 配置工具(可从 Visual Studio 工具-> 菜​​单中获得)手动选择您的合同,然后查看您的配置文件。

于 2013-04-11T04:31:47.060 回答