我正在写第一个宁静的wcf服务。 我写了一个WCF库。它使用dev webserver进行测试。 一切顺利,直到部署。
我按照这篇非常好的文章将其部署到win2008服务器上的IIS7。 http://blah.winsmarts.com/2008-4-Host_a_WCF_Service_in_IIS_7_-and-amp;_Windows_2008_-_The_right_way.aspx
我收到此消息。
无法在ServiceHost指令中作为Service属性值提供的类型'KPIGetter_Library.KPIGetter',或在配置元素system.serviceModel / serviceHostingEnvironment / serviceActivations中提供的类型。
以下是我的KpiGetter.svc文本文件中的单行
<% @ServiceHost Service="KPIGetter_Library.KPIGetter" %>
命名空间和类名是正确的。网站如何知道查找DLL以查找此内容。文件夹中有3个DLL。我的猜测只是将DLL名称与命名空间匹配。
我根据上面提到的文章添加了一个web.config。 有一个KPIGetter_Library.dll.config从库项目的App.config重命名。 其内容列于此处。同样,这适用于开发环境
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" />
</system.web>
<!-- When deploying the service library project, the content of the config file must be added to the host's
app.config file. System.Configuration does not support config files for libraries. -->
<system.serviceModel>
<services>
<service name="KPIGetter_Library.KPIGetter">
<endpoint address="" binding="webHttpBinding" contract="KPIGetter_Library.IKpiGetter" behaviorConfiguration="restfulBehaviour">
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://hodbd05:8000/kpigetter"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="restfulBehaviour">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information,
set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="webHttpBinding" scheme="http" />
</protocolMapping>
</system.serviceModel>
</configuration>
如果有人可以提出建议,或者提供一篇可以帮我解决这个问题的文章,我会非常感激。
提前致谢。
格雷格
答案 0 :(得分:0)
好的。
问题是KPIGetter.svc文件和web.config文件需要位于您从IIS指向的文件夹中。 dll需要位于bin文件夹中。 很公平。
此外,web.config文件需要与* .dll.config文件的内容合并(最终是项目中的app.config文件。同样公平。
作为一种故障排除技术,我在服务器上创建并共享了第二个文件夹,然后从我的visStudio发布到该文件夹。在这里,我能够看到它想要一个BIN文件夹。它也给了我一个非常好的web.config。我只需要编辑HostUrl。
一旦我这样做,我得到一个错误,我的连接字符串是错误的。那时我知道我在家里自由了。
我提到的文章确实很好地详细说明了必须在文件夹上设置的安全性。它还详细介绍了在IIS中需要完成的几个简单步骤(设置池,创建网站等)
希望这有助于某人,这花了我一天左右的时间。
干杯
格雷格