1

我正在编写一个RESTful Web 服务,并且在自己进行基本步骤方面遇到了很大的麻烦。

我可以做到以下几点:

  1. 可以创建 RESTful Web 服务并将 XML(不是soap+xml)发送和接收回客户端webHttpBinding

  2. 可以创建 RESTful Web 服务并使用如下定义的合约发送和接收soap+xml:

    [OperationContract]
         [WebInvoke(Method = "POST",
             UriTemplate = "",
             BodyStyle = WebMessageBodyStyle.Bare,
             RequestFormat = WebMessageFormat.Xml,
             ResponseFormat = WebMessageFormat.Xml)]        
         XmlElement PostRequestXML(Stream xmlData);
    

第(2)点是发送和接收soap+xml数据的正确方法吗?

我在网上做了很多搜索,但找不到更好的链接,它解释了创建 web 服务以发送和接收soap+xml 的详细步骤。

我想知道 :

  • 有什么更好的方法来设计我的 RESTful Web 服务来发送和接收soap+xml?你能告诉我操作合同的定义吗?

  • 我需要使用哪种绑定?如果有任何例子,请分享。

    • 你能分享我关于编写OperationContract和配置 web.config 的详细信息吗?

请求和响应应如下所示。

要求:

Header:
 POST /EnrollmentServer/Discovery.svc HTTP/1.1
 Content-Type: application/soap+xml; charset=utf-8
 User-Agent: Windows Phone 8 Enrollment Client
 Host: EnterpriseEnrollment.Contoso.com
 Content-Length: xxx
 Cache-Control: no-cache

<?xml version="1.0"?>
 <s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing"
 xmlns:s="http://www.w3.org/2003/05/soap-envelope">
 <s:Header>
 <a:Action s:mustUnderstand="1">
http://schemas.microsoft.com/windows/management/2012/01/enrollment/IDiscoveryService/Discover
 </a:Action>
 <a:MessageID>urn:uuid: 748132ec-a575-4329-b01b-6171a9cf8478</a:MessageID>
 <a:ReplyTo>
 <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
 </a:ReplyTo>
 <a:To s:mustUnderstand="1">
https://ENROLLTEST.CONTOSO.COM/EnrollmentServer/Discovery.svc
 </a:To>
 </s:Header>
 <s:Body>
 <Discover xmlns="http://schemas.microsoft.com/windows/management/2012/01/enrollment/">
 <request xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
 <EmailAddress>user@contoso.com</EmailAddress>
 <RequestVersion>1.0</RequestVersion>
 </request>
 </Discover>
 </s:Body>
 </s:Envelope>

回复:

标题:

 HTTP/1.1 200 OK
 Content-Length: 865
 Content-Type: application/soap+xml; charset=utf-8
 Server: EnterpriseEnrollment.Contoso.com
 Date: Tue, 02 Aug 2012 00:32:56 GMT



<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
 xmlns:a="http://www.w3.org/2005/08/addressing">
 <s:Header>
 <a:Action s:mustUnderstand="1">
http://schemas.microsoft.com/windows/management/2012/01/enrollment/IDiscoveryService/DiscoverResponse
 </a:Action>
 <ActivityId>
 d9eb2fdd-e38a-46ee-bd93-aea9dc86a3b8
 </ActivityId>
 <a:RelatesTo>urn:uuid: 748132ec-a575-4329-b01b-6171a9cf8478</a:RelatesTo>
 </s:Header>
 <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">>
 <DiscoverResponse
 xmlns="http://schemas.microsoft.com/windows/management/2012/01/enrollment">
 <DiscoverResult>
 <AuthPolicy>OnPremise</AuthPolicy>
 <AuthUrl/>
 <EnrollmentPolicyServiceUrl>
https://enrolltest.contoso.com/ENROLLMENTSERVER/DEVICEENROLLMENTWEBSERVICE.SVC
 </EnrollmentPolicyServiceUrl>
 <EnrollmentServiceUrl>
https://enrolltest.contoso.com/ENROLLMENTSERVER/DEVICEENROLLMENTWEBSERVICE.SVC
 </EnrollmentServiceUrl>
 <FederatedServiceName/>
 <FederatedServicePolicy/>
 </DiscoverResult>
 </DiscoverResponse>
 </s:Body>
 </s:Envelope>
4

1 回答 1

3

我创建了许多 WCF API,其中一些是 REST。我的主要理解是 - 不要使用它!WCF 很好地使您能够选择在服务器和客户端之间使用的协议类型。使用它,您需要为性能和耐用性付出代价。如果您已经决定使用 REST(这是一个很好的选择),我建议您深入研究ServiceStack。这是迄今为止最成熟、维护最先进、最先进的 .NET REST 框架。它易于使用,并通过在途中做出许多明智的选择来帮助您正确构建 API。试一试,永不回头!

于 2013-06-19T20:32:57.073 回答