我正在使用Visual Studio 2010中的C#创建一个非常基本的WCF服务。我想知道是否可以通过键入类似于//localhost:49815/Service1.svc/methodName(parameterValue)
的内容直接从浏览器运行我的方法?
这是我的代码的本质。
接口:
using ...
namespace WcfService1{
[ServiceContract]
public interface IService1{
[OperationContract]
[WebGet]
string echoWithGet(string s);
[OperationContract]
[WebInvoke]
string echoWithPost(string s);
}
}
方法:
public string echoWithGet(string s ){
return "Get: "+s;
}
public string echoWithPost(string s){
return "Post: " + s;
}
答案 0 :(得分:45)
是的,您可以在浏览器中调用这些方法,如果您的服务配置正确,但您的URL语法错误。
要从浏览器调用WCF方法,您需要做两件事:
[WebGet]
和[WebInvoke]
属性。使用webHttpBinding
作为服务的终结点并启用webHttp
行为。有关示例配置,请参阅http://weblogs.asp.net/kiyoshi/archive/2008/10/08/wcf-using-webhttpbinding-for-rest-services.aspx,但相关部分为:
<service>
<endpoint behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="MyServiceContract" />
</service>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
完成后,WCF将开始侦听URL请求并将其路由到适当的Web方法。您可以在WebGet
或WebPost
属性中设置网址模板,以便将网址细分映射到方法参数,如果您想让网址“更干净”,那么这是可选的。否则,使用参数delimiter:
http://localhost:49815/MyService.svc/methodName?parameterName=value
请注意,Web调用方法的默认值是POST。从技术上讲,你可以通过浏览器执行这些操作,但它更难(你必须制作本地HTML表单,或使用你的Javascript控制台,或类似的东西),但WebGet
方法可以通过请求正确的URL来调用。
此外,如果您的方法返回比字符串更复杂的东西,WCF将尝试将其序列化为JSON;您可能需要在结果页面上“查看来源”才能看到它。
答案 1 :(得分:5)
这不能解答您的问题,但它会让您的生活更轻松,使您的服务RESTful(或类似REST)。虽然您可以使用WCF执行此操作,但我强烈建议您查看ASP.NET Web API。
还有其他可用于创建RESTful服务的替代方案,例如Nancy或ServiceStack。