我一直在这里和其他地方搜索,所以请原谅任何冗余,但是,我正在尝试做我收集的应该是简单的,并且建议的方式,构建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>
答案 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在许多不同的选择和风格中都很棒,但它也有一个陡峭的学习曲线。