【发布时间】:2011-02-15 12:58:28
【问题描述】:
我正在尝试在 c# mvc web 项目中创建 wcf 服务。我添加了一个“WCF 服务”类型的新项目,并在提供的接口中添加了一个测试方法:
[ServiceContract]
public interface ITest
{
[OperationContract]
void DoWork();
bool testWorking();
}
以及提供的服务:
public class Test : ITest
{
public void DoWork()
{
}
public bool testWorking()
{
return true;
}
}
然后我转到 web.config 文件并将以下内容添加到 system.ServiceModel 标签:
<services>
<service name="Test" behaviorConfiguration="MyServiceTypeBehaviors">
<endpoint address="" binding="wsHttpBinding" contract="ITest">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
在这一点上,据我了解,我应该能够在浏览器中查看它并收到一条测试消息,告诉我是时候实现客户端以使用此服务了。然而实际发生的是我的浏览器下载了 .svc 文件!
两个问题:
1) 我到底做错了什么?为什么我没有看到预期的消息?
2) 有什么方法可以自动启动 WCF 测试工具在该服务上运行?我能找到的唯一指导方针是从 WCF 项目开始。
更新:(svc 文件的内容 - 从评论中获取)
<%@ ServiceHost Language="C#" Debug="true"
Service="myemployersaddress.com.Test" CodeBehind="Test.svc.cs" %>
【问题讨论】:
-
您是否在 IIS 中托管服务?看起来您没有为 .svc 安装正确的处理程序。另请注意,服务的名称属性和端点的合同属性必须包含包含名称空间的类型名称 - 但它不是您当前问题的根源。
-
我确实想知道命名空间 - 认为由于它托管在同一个项目中,所以它们没有必要,但感谢您的澄清。我正在使用 Visual Studio 提供的默认服务器在 IIS 中运行它......不完全确定如果它们不存在,将如何安装正确的处理程序。
-
SVC 文件中的
Service=...应该也引用服务的完全限定名称class - 例如Service=YourNamespace.Test。你的svc文件是这样的吗?这里的服务条目不是任何类型的 Web URL 或类似的东西......