作为Http Post平台独立的最低调用WCF服务

时间:2009-10-15 01:59:18

标签: .net wcf

我创建了一个微不足道的WCF服务作为概念证明。我最终希望通过网络非常简单地公开WCF服务,以便任何消费者通过URL调用,并能够将数据发布到某些方法(非.Net客户端,因此它应该作为一个简单的网站向公众显示)服务)。我在我的endpointBehavior中使用了webHttpBinding,启用了webHttp,并使用WebGetAttribute向服务添加了一些方法,并使用WebInvokeAttribute为post添加了一些方法。 WebGet的工作顺利进行。我可以从Web浏览器浏览到我的UriTemplate中定义的url模式,从url args传递参数,返回任何数据类型(XElement,string,int等)。我也可以通过本地任何其他应用类型的WebClient.DownloadString来调用它。

因此,WebInvoke(Post)表现不佳。显然浏览到UriTemplate模式是无效的,因为这会通过浏览器发出“GET”,所以我得到Service - Method Not Allowed。我很好。但是,只要我编写一些简单的WebClient.UploadString内容来通过Post调用服务,我就会收到错误。

起初我得到415方法不允许。我google了,在我的serviceBehavior中启用了serviceDebug includeExceptionDetailInFaults,现在错误是400 Bad Request。我进一步搜索,并发现建议我明确将WebClient.Encoding设置为UTF8并在调用之前将我的Content-type标头设置为“application / xml; charset = utf-8”。一样。我尝试使用其他mime类型(text / plain等)并以各种方式格式化上传的字符串(key = value,key ='value',value,'value',\“value \”等)。我甚至试过UrlEncoding它。我甚至取消了整个WebClient并使用了旧的HttpWebRequest / HttpWebResponse路由,我仍然得到了同样的错误。

此时,我不认为问题出在客户端。我对WCF不太熟悉,所以我很容易在那里做错事。例如,我正在使用单个服务和单个端点。对于get和post公开的服务方法来说,它是否很酷?他们是否需要在serviceBehavior和/或endpointBehavior中略有不同?我在网上看到一些例子,说WebInvoke胜过Http Post就行了,所以我很确信我只是在服务上遗漏了一些简单的东西。

1 个答案:

答案 0 :(得分:1)

要测试您的WCF REST服务,您绝对应该以Fiddler的形式获得一些帮助,这样您就可以轻松地创建POST请求并将其发送到您的URL。这样可以确保您在服务中获得正确的POST请求。

另外,如果您还没有,请查看WCF REST入门套件上的Pluralsight系列截屏视频 - 特别是HTTP Plain XML (POX) Services上的这个截屏视频。 Aaron Skonnard非常清楚地解释了如何做事以及可以解决的问题。强烈推荐!

马克