我是一个完整的WCF新手。我正在尝试构建一个非常非常简单的IIS 7.0托管Web服务。出于我无法控制的原因,它必须是WCF而不是ASMX。它是预先存在的Web应用程序的包装服务,它只执行以下操作:
1)接收带有请求体XML封装表单元素的POST请求。像valuevalue这样的东西。这是非类型化的XML,XML是原子(表单)而不是记录/对象列表。
2)向请求XML添加几个标签,并使用简单的POST +裸XML调用另一个基于HTTP的服务 - 实际上这将由一些内部SQL操作添加,但这不是问题。< / p>
3)从第3方服务接收XML响应并将其作为对步骤1中原始呼叫客户端的响应进行中继。
客户端(步骤1)将是某种基于Web的脚本,但可以是任何东西.aspx,python,php等。
我不能拥有SOAP,并且通常基于WCF的REST示例与他们的合同和序列化让我感到困惑。这在概念上似乎是一个非常普遍且非常简单的问题。在代码中实现起来很容易,但是IIS托管的WCF是必需的。
任何指针?
答案 0 :(得分:4)
构建POX服务通常很简单,只需添加一些属性并更改web.config
中的一些设置。
首先,将[WebInvoke]
添加到服务合同的POX方法中:
[ServiceContract]
public interface IMyService
{
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
MyResult MyOperation(MyClass c);
}
有时您还必须为数据协定指定XML命名空间:
[DataContract(Namespace = "http://example.com/myclass")]
public class MyClass { ... }
然后设置web.config
以使用webHttpBinding
和webHttp
行为:
<system.serviceModel>
<services>
<service behaviorConfiguration="MyApp.MyBehavior" name="MyApp.MyService">
<endpoint address="" binding="webHttpBinding"
contract="MyApp.IMyService" behaviorConfiguration="POX"
bindingNamespace="http://example.com/">
<--! More endpoint configuration here -->
</endpoint>
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<!-- Behavior config here -->
</serviceBehaviors>
<endpointBehaviors>
<behavior name="POX">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
就是这样。它似乎比实际更难。
注意:如果您确实希望接收无类型XML而不是序列化类,请将方法更改为接收XElement
,如下所示:
[WebInvoke(...)]
MyResult MyOperation(XElement element);
答案 1 :(得分:1)
我会看看WCF REST入门套件@ http://www.asp.net/downloads/starter-kits/wcf-rest/和PluralSite HowTo @ http://www.pluralsight-training.net/microsoft/olt/howtovideo.aspx?a=aaron-skonnard&n=http-plain-xml-services。那些应该让你开始并指出正确的方向。
答案 2 :(得分:1)
我认为您所引用的视频可从here
获取答案 3 :(得分:0)
Ben拥有正确的视频 - 不幸的是,该视频现在是Pluralsight网站上的“仅限订阅者”:-(: - : - - (
幸运的是,几乎所有这些介绍视频都可以从MSDN WCF REST Developer Center获得 - 除了Ben提到的那个....
但是WCF REST开发人员中心应该还有很多优秀的介绍材料,可以轻松快速地使用WCF REST!
答案 4 :(得分:0)
NET 4.0 here
中有一个例子