部署WCF服务,C#,WCF,VS2008

时间:2009-05-08 16:12:55

标签: c# visual-studio-2008 wcf

我有一个测试项目,WCF服务库,我发布了该项目。拥有一台安装正确的2003服务器。我浏览到我的应用程序,点击.svc后出现此错误。

无法找到作为ServiceHost指令中的Service属性值提供的类型“SearchService”。

这是我的web.config

的摘录
<endpoint address="" binding="wsHttpBinding" contract="TestService.ISearchService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>

我的界面:

  [ServiceContract]
public interface ISearchService
{
    [OperationContract]
    string GetName();
}

我的实施:

   [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
public class SearchService :ISearchService
{
    #region ISearchService Members

    public string GetName()
    {
      returnn "HAL-2001" 
    }

 }

4 个答案:

答案 0 :(得分:2)

嗯,wsHttpBinding要求您使用SOAP连接到您的服务 - 单独的Web浏览器不会删除它,因此当您浏览.svc文件时它不起作用的原因。没错,真的。

您需要创建一个真正完整的SOAP客户端来连接您的服务并对其进行测试。或者,您也可以使用位于WcfTestClient.exe文件夹中的VS2008\Common7\IDE测试客户端。

马克

答案 1 :(得分:2)

ANo,错误表明主机无法在web.config中找到服务实现“SearchService”的定义。在web.config中,您需要包装&lt; endpoint&gt; &lt; service&gt;中的标记标签。 &lt; service&gt;的name属性应该设置为SearchService类的全名(包括所有名称空间)。您还需要定义一个行为以使服务能够在浏览器中显示WSDL。您可能还想删除&lt; dns value =“localhost”/&gt;将服务部署到服务器时。

以下是一个示例代码段,请确保您在&lt; service&gt;中输入SearchService的完整类名称标记,并确保完整的类名称在.svc文件中:

<system.serviceModel>
 <services>
  <service name="SearchService" behaviorConfiguration="ServiceBehavior">
    <endpoint address="" binding="wsHttpBinding" contract="TestService.ISearchService">
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="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="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>  </system.serviceModel>

答案 2 :(得分:1)

不,你应该切换到basicHttpBinding并测试以确保一切正常。您正在使用WSHttpBinding,默认情况下它已启用身份验证。您的客户端需要传递凭据才能实际获得响应,这就是浏览器调用无效的原因。

答案 3 :(得分:0)

您的客户端代码是什么?为此,它应该调用如下的代理类。

class SearchServiceProxy : ClientBase<ISearchService>, ISearchService
{
    public string GetName()
    {
        return Channel.GetName();
    }
}