类型' KPIGetter_Library.KPIGetter',作为ServiceHost指令中的Service属性值提供,

时间:2014-02-06 16:33:47

标签: c# asp.net wcf

我正在写第一个宁静的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>

如果有人可以提出建议,或者提供一篇可以帮我解决这个问题的文章,我会非常感激。

提前致谢。

格雷格

1 个答案:

答案 0 :(得分:0)

好的。

问题是KPIGetter.svc文件和web.config文件需要位于您从IIS指向的文件夹中。 dll需要位于bin文件夹中。 很公平。

此外,web.config文件需要与* .dll.config文件的内容合并(最终是项目中的app.config文件。同样公平。

作为一种故障排除技术,我在服务器上创建并共享了第二个文件夹,然后从我的visStudio发布到该文件夹​​。在这里,我能够看到它想要一个BIN文件夹。它也给了我一个非常好的web.config。我只需要编辑HostUrl。

一旦我这样做,我得到一个错误,我的连接字符串是错误的。那时我知道我在家里自由了。

我提到的文章确实很好地详细说明了必须在文件夹上设置的安全性。它还详细介绍了在IIS中需要完成的几个简单步骤(设置池,创建网站等)

希望这有助于某人,这花了我一天左右的时间。

干杯

格雷格