当操作指定了UriTemplate时,使用WebChannelFactory访问WCF REST操作

时间:2012-08-09 02:34:24

标签: wcf rest uritemplate webchannelfactory

根据下面的代码段,我有一个WCF Rest服务

[ServiceContract]
public interface IService
{
     [OperationContract]
        [WebInvoke(UriTemplate="/SaveList/Foos/",Method="POST")]
        bool SaveList(List<Foo> myFoos);

}

该服务是一个自托管服务,并使用webHttpBinding公开一个端点。我有一个客户端控制台应用程序,其中包含以下代码段:

public void Send()
{
   var myObj = new Foo{Id=1, Name="Test"};
   using (WebChannelFactory<OurService.Services.IOurService> cf = new WebChannelFactory<IOurService>("WebHttpBinding_IService"))
   {
       IUtranetService channel = cf.CreateChannel();
       using (new OperationContextScope(channel as IContextChannel))
       {
           var status = channel.SaveList(new[] { myObj });

        }

    }

} 

客户端代码抛出异常,如下所示: 在“http:// localhost:1133 / Service / SaveList”中没有可以接受该消息的端点。

我不确定我哪里出错了。如果我从服务合同中删除UriTemplate,客户端将返回正确的响应。

非常感谢任何帮助。

此致 Ruchitra

1 个答案:

答案 0 :(得分:1)

您的URI模板不正确。您需要将其更改为:

 [WebInvoke(UriTemplate="/SaveList/Foos/SaveList",Method="POST")] 

它不会自动附加您的方法名称。

另外,根据我留下的评论,您不需要Method =“Post”