从浏览器运行WCF方法

时间:2013-09-24 18:36:52

标签: c# wcf

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

2 个答案:

答案 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方法。您可以在WebGetWebPost属性中设置网址模板,以便将网址细分映射到方法参数,如果您想让网址“更干净”,那么这是可选的。否则,使用参数delimiter:

传递参数的方式与将参数传递给任何其他URL的方式相同
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服务的替代方案,例如NancyServiceStack