【发布时间】:2010-10-30 23:44:26
【问题描述】:
背景
我过去创建了 ASMX Web 服务,并且能够从 Web 浏览器和使用地址约定的 Ajax GET 请求访问该服务:MyService.asmx/MyMethod?Param=xxx
我刚刚开始使用 WCF,并在我的 ASP.NET 项目中创建了一个新的 Web 服务。它会创建一个扩展名为 .svc 的文件,例如 MyService.svc。
现状
我可以使用 VS2008 附带的WcfTestClient 来使用该服务。我还可以通过在另一个项目中添加服务引用或使用svcutil.exe 命令行生成代理和配置文件来创建自己的 WCF 客户端。
问题
当我尝试使用 MyService.svc/MyMethod?MyParam=xxx 从浏览器中使用该服务时,我得到一个没有任何错误的空白页面。
我的尝试
我已经在 web.config 中添加了 basicHttpBinding 并在行为配置中设置为 HttpGetEnabled。我还在运营合同中添加了[WebGet(UriTemplate = "MyMethod?MyParam={MyParam}")] 属性。
我已经关注了另一个堆栈溢出问题中的信息:
REST / SOAP EndPoints for a WCF Service
但是,执行这些步骤后,我要么得到一个空白页面,要么得到一个 HTTP 404 错误。代码没有什么特别之处。我只是将一个字符串作为参数并返回“Hello xxx”。这是一个基本的“Hello WCF World”概念验证类型的东西。
UPDATE - 这是相关代码
[ServiceContract]
public interface IMyService
{
[WebGet(UriTemplate = "MyMethod/MyParam={MyParam}")]
[OperationContract]
string MyMethod(string MyParam);
}
Web.Config - system.serviceModel 部分
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="MyService">
<endpoint address=""
binding="wsHttpBinding" contract="IMyService" />
<endpoint address="MyService.svc"
binding="basicHttpBinding" contract="IMyService" />
<endpoint address="mex"
binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
【问题讨论】:
标签: asp.net wcf web-services rest