我有一个测试项目,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"
}
}
答案 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();
}
}