31

我正在 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;
        }
4

3 回答 3

48

是的,如果您的服务配置正确,您可以在浏览器中调用这些方法,尽管您的 URL 语法错误。

要从浏览器调用 WCF 方法,您需要做两件事:

  • 您已经完成的方法的使用[WebGet]和属性。[WebInvoke]
  • 使用 awebHttpBinding作为服务的端点并启用该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 方法。如果你想让你的 URL “更干净”,你可以在你的WebGet或属性中设置 URL 模板,将 URL 段映射到方法参数,但这是可选的。WebPost否则,使用参数分隔符传递参数的方式与将参数传递给任何其他 URL 的方式相同:

http://localhost:49815/MyService.svc/methodName?parameterName=value

请注意,Web 调用方法的默认值是 POST。从技术上讲,您可以通过浏览器执行这些操作,但要困难得多(您必须制作本地 HTML 表单,或使用 Javascript 控制台或类似的东西),但WebGet只需请求正确的 URL 即可调用这些方法。

此外,如果您的方法返回比字符串更复杂的内容,WCF 将尝试将其序列化为 JSON;您可能需要在结果页面上“查看源代码”才能看到它。

于 2013-09-24T19:12:22.563 回答
5

这并不能回答您的问题,但会使您的服务成为 RESTful(或类似 REST)的,让您的生活更轻松。虽然您可以使用 WCF 做到这一点,但我强烈建议您查看ASP.NET Web API

还有其他替代方法可用于创建 RESTful 服务,例如NancyServiceStack

于 2013-09-24T18:41:49.913 回答
1

一个直接的答案。对于 GET 方法,您可以使用浏览器查看结果。对于 POST 方法,如果您直接粘贴您的 url 用于 post 方法,则不能使用浏览器。为了实现 POST,您可以创建一个 HTML FORM 或使用 FIDDLER 来查看结果。

于 2015-11-23T15:48:40.727 回答